MySQL-Datensätze ordnen

Hallo,

ich habe folgendes Problem:
ich möchte aus einer MySQL-Tabelle Datensätze ziehen, die nach dem Maximalwert eines Feldes in einer anderen Tabelle geordnet werden...

Ich sitz jetzt schon seit Stunden vor dem Problem und alles, was ich bis jetzt ausprobiert habe erzeugt zwar keine Fehler funktioniert aber vorne und hinten nicht.

Es sind zwei Tabellen: "events" und "images". Es werden mehrere Bilder aus der Image-Tabelle einem Event zugeordnet. Ziel ist es, die Events nach dem jeweiligen Maximalwert des "date_created"-Feldes aus der Image-Tabelle zu ordnen.

Hier mein Code:
PHP:
$getEvents = mysql_query("SELECT events.id, events.name, events.prev_image AS id, `name`, `prev_image` FROM events, images WHERE events.cat_id = '".$id."' and events.status = '1' ORDER BY images.date_created LIMIT 4");


Danke
 
Hallo,

ich glaub du hast das wichtigste in deiner Abfrage vergessen
Den Join der beiden Tabellen events und images.

Markus
 
Hi,

du hast keinen Join zwischen Deiner Events- und Deiner Images-Tabelle. Es fehlt so etwas wie where "events.cat_id = images.cat_id"

Hier mein Code:
PHP:
$getEvents = mysql_query("SELECT events.id, events.name, events.prev_image AS id, `name`, `prev_image` FROM events, images WHERE events.cat_id = '".$id."' and events.status = '1' ORDER BY images.date_created LIMIT 4");


Danke
 
Danke für die Antworten...

Ich muss gestehen, dass ich noch nie mit Joins gearbeitet habe... Die Texte zu den verschiedenen Joins haben leider nur ein mittelgroßen Fragezeichen über meinem Kopf hinterlassen.

Kann mir wer sagen welchen Join ich für dieses Problem wie einsetze?

Danke
 
Hi,

das ist recht einfach, den Equal-Join, also wo in der Spalte X deiner Tabelle Y (Images) der selbe Wert drin steht wie in Spalte A der Tabelle B (Events).

Du musst in einer Deiner beiden Tabellen eine Spalte haben, in der die Schlüsselwerte der anderen Tabelleneinträge drin stehen. Also soetwas wie: In der images-Tabelle hast Du eine Spalte wo die IDs Deiner Events drin stehen. Das nennt man Fremdschlüssel. Dann machst Du nur noch einen Vergleich wie ich ihn oben beschrieben habe "events.cat_id = images.cat_id". "cat_id ist hier der Name der Spalte über den der Vergleich funktionieren soll. Klingt komplizierter als es eigentlich ist.

Wenn Du deine Abfrage z.B. über phpMyAdmin ausführst wirdst Du sehen,dass Deine Ergebnissmenge viel zu groß ist, weil er nicht weiß welche Einträge der einen Tabelle zu den Einträgen der anderen Tabelle passen. Darum fügt er einfach alle Einträge der einen Tabelle mit allen Einträgen der anderen Tabelle zusammen. D.h. aus zwei Tabellen mit jeweils drei Einträgen entsteht im Ergebnis eine Tabelle mit 3 X 3 = 9 Einträgen.

Hoffe das war jetzt nicht zu verwirrend.

Marcus.
 
Er zeigt keinerlei Fehler, jedoch funtioniert es noch nicht so, wie es soll...

Die Event-Einträge werden jetzt so oft angezeigt, je nachdem wieviele Fotos zugeordnet sind --> das ist schlecht.

Die ID der Events ist plötzlich "NULL" - das liegt bestimmt an "WHERE events.id = images.event_id"

Ich habe es mittlerweile auch schon mit der LEFT und RIGHT JOIN Methode versucht, jedoch fuktionieren diese auch nich, bzw bekomme ich diese nicht zum laufen.

PHP:
$getEvents = mysql_query("
SELECT events.id, events.name, events.prev_image AS id, `name`, `prev_image` 
FROM events, images WHERE events.id = images.event_id 
and events.cat_id = '".$id."' and events.status = '1' 
ORDER BY -images.date_created LIMIT 4");
 
SQL:
SELECT events.id, events.name, events.prev_image AS id, `name`, `prev_image`
FROM events
JOIN images ON events.id = images.event_id 
AND events.cat_id = '".$id."'
AND events.status = '1' 
ORDER BY images.date_created
LIMIT 4
Das sieht doch eigentlich so ganz gut aus...
 
Danke für die Hilfe, es funktioniert nur leider nicht.

Die Anzahl der ausgegebenden Datensätze richtet sich nach der Anzahl der zugewiesenen Bilder, jedoch nicht nach der einzelnen Events, wie gewünscht.

Kurz ein Beispiel:
Ich habe einem Event 3 Bilder zugeordnet. Anstatt, dass das Event nur einmal erscheint, erscheint es 3mal.

Hat noch jemand eine Idee?
 
hmm... vielleicht mit GROUP BY images.event_id - allerdings wenn du alle 3 Bilder sehen möchtest ist das klar, dass die Event_ID mehrfach angezeigt wird.

Vielleicht solltest du einfach bei der Ausgabe prüfen, ob die vorherige Event_ID die gleiche ID ist und dann die ID nicht ausgeben... Also bei der Ausgabe in PHP
 

Neue Beiträge

Zurück