• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

select * FROM (select

Status
Für weitere Antworten geschlossen.

DerSchatten

Neues Mitglied
Kann mir jemand einen Tip geben was hier falsch ist:

PHP:
  $sql = "SELECT * FROM (
  SELECT
   Retro_Artikel.ID,
   Retro_Artikelmarke.Marke,
   Retro_Artikel.ArtikelBezeichnung,
   Retro_Artikeldetails.Bemerkungen
  FROM
   Retro_Artikelmarke
  RIGHT JOIN
   Retro_Artikel
  LEFT JOIN
   Retro_Artikeldetails
  ON
   Retro_Artikel.ID = Retro_Artikeldetails.Artikel_ID
  ON
   Retro_Artikelmarke.ID = Retro_Artikel.Marke_ID
  ORDER BY
   Retro_Artikel.ID DESC LIMIT 10)
  ORDER BY
   Retro_Artikelmarke.Marke";

Die Idee dahinter ist zuerst die letzten 10 Datensätze auszugeben und diese dann nach "Marke" zu sortieren.
 
Werbung:
Die Idee dahinter ist zuerst die letzten 10 Datensätze auszugeben und diese dann nach "Marke" zu sortieren.

Code:
SELECT * FROM `Retro_Artikel` ORDER BY `id` DESC LIMIT 10
Gibt dir die letzten 10 Einträge aus.


An deinem Code finde ich nichts falsches, aber verschachtelte Abfragen gehen erst ab MySQL 4.1 - vlt ist deine Version nicht hoch genug - ansonsten vielleicht mal die Fehlermeldung geben.
 
Werbung:
wenn es nicht funktioniert dann gibt es eine Fehlerausgabe

-> Wie stellst du die Anfrage?

wenn einfach nix ausgegeben wird, dann steht wohl nichts in der Datenbank
 
Es ist einfach so, dass MySQL im Falle eines Fehlers eine Fehlermeldung ausgibt. Entweder es wird keine Fehlermeldung ausgegeben, was bedeuten würde, dass an der Struktur und dem Aufbau deines Queries alles in Ordnung ist, oder du versäumst dir die Fehlermeldung ausgeben zu lassen, wie z.b in php mit mysql_error();

Wenn nun letzteres der Fall ist und du keine Fehlermeldung postest können wir dir nicht weiterhelfen. Sollte das erste der Fall sein ist nicht dein Query falsch sondern die Logik dahinter. Diese können wir aber nicht "überprüfen" da uns der Aufbau deiner Datenbank / der entsprechenden Tabellen und deren Relationen unbekannt sind.
 
Werbung:
Also, ich habe das ganze jetzt mal funktionierend in VBA von Access gebastelt und als SQL ausgegeben und dann für MySQL umstrukturiert und im phpAdmin eingebeben:

Code:
SELECT * 
FROM ( SELECT Retro_Artikel.ID, Retro_Artikelmarke.Marke, Retro_Artikel.ArtikelBezeichnung, Retro_Artikeldetails.Bemerkungen
FROM ( Retro_Artikelmarke
RIGHT JOIN Retro_Artikel ON Retro_Artikelmarke.ID = Retro_Artikel.Marke_ID
)
LEFT JOIN Retro_Artikeldetails ON Retro_Artikel.ID = Retro_Artikeldetails.Artikel_ID
ORDER BY Retro_Artikel.ID DESC 
LIMIT 10 
)
ORDER BY Retro_Artikelmarke.Marke

Fehlermeldung:
#1248 - Für jede abgeleitete Tabelle muss ein eigener Alias angegeben werden
 
ja da ist doch die Fehlermeldung - und sie beschreibt zu gleich den Weg zur Fehlerbeseitigung.

Einfach einen Alias für jede Tabelle machen. also z.b. immer
Code:
SELECT `ra`.`id` FROM `Retro_Artikel` as `ra` ...
 
Werbung:
Du nimmst z.B. Retro_Artikelmarke.ID in deiner Abfrage. Dies bedeutet wähle das Feld ID der Tabelle Retro_Artikelmarke. MySQL erwartet von dir aber, dass du das über aliase machst. Du musst also ein Alias registrieren der sich auf Retro_Artikelmarke bezieht. Bsp:
Code:
[...] FROM Retro_Artikelmarke as RA
Somit registrierst du RA als Alias für Retro_Artikelmarke.
Die Abfrage musst du dann mit dem Alias machen, also nicht Retro_Artikelmarke.ID sondern RA.ID
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben