Zur Navigation

MYSQL Syntax Problem

1 Horst_Braun

Hallo,

folgendes Problem. Der erste Code führt zum richtigen Ergebnis, aber es entstehen Dopplungen, weil ich mehrere Einträge pro bild_gal_id habe. Also habe ich Code 2 erzeugt. Dort sage ich dem System, dass er bei den Doppelten nur den mit der höchsten bild_id nehmen soll. Geht aber nicht. Was kann der Fehler sein?

Vielen Dank.
$result = mysql_query("SELECT t1.bild_datum, t2.gallang_name, t2.gallang_gal_id FROM kogppx07_galerie_galerien_language AS t2 INNER JOIN kogppx07_galerie_bilder AS t1 ON t2.gallang_gal_id = t1.bild_gal_id WHERE t2.gallang_lang_id=1 ORDER BY t1.bild_datum DESC LIMIT 10;");  


$result = mysql_query("SELECT t1.bild_datum, t2.gallang_name, t2.gallang_gal_id FROM kogppx07_galerie_galerien_language AS t2 INNER JOIN kogppx07_galerie_bilder AS t1 ON t2.gallang_gal_id = t1.bild_gal_id WHERE t2.gallang_lang_id=1 && t1.bild_id = MAX (t1.bild_id) ORDER BY t1.bild_datum DESC LIMIT 10;");   

24.06.2013 17:09

2 Jörg Kruse

MAX() gehört in das SELECT Statement und setzt eine Gruppierung mit GROUP BY voraus.

Du könntest mit GROUP BY und DISTINCTROW einen Datensatz pro Gruppierung ausgeben lassen

SELECT DISTINCTROW t1.bild_datum, t2.gallang_name, t2.gallang_gal_id
FROM kogppx07_galerie_galerien_language AS t2
INNER JOIN kogppx07_galerie_bilder AS t1
ON t2.gallang_gal_id = t1.bild_gal_id
WHERE t2.gallang_lang_id=1
GROUP BY t1.bild_gal_id
ORDER BY t1.bild_id DESC, t1.bild_datum
DESC LIMIT 10

24.06.2013 17:35

3 Horst_Braun

Hallo,

vielen Dank für die super schnelle Antwort.

Das geht zwar, aber nicht mit dem gewünschten Ergebnis. Es erfolgt keine Ordnung mehr nach bild_datum.

24.06.2013 21:32

4 Jörg Kruse

Dann dreh die Sortierung um:

ORDER BY t1.bild_datum, t1.bild_id DESC

24.06.2013 21:45

5 Horst_Braun

Geht nicht.

Ich verstehe die Gruppe nicht so richtig. Du erstellst also eine Gruppe aus allen allen Zeilen mit einer t1.bild_gal_id.

Dann ordnest du innerhalb der Gruppe nach t1.bild_id

Das Datum klappt aber in beiden Versionen nicht.

24.06.2013 22:13

6 Jörg Kruse

Dann ordnest du innerhalb der Gruppe nach t1.bild_id

Sortiert werden die gruppierten Datensätze. Unterscheiden sich die Daten (Mehrzahl von Datum) innerhalb einer Gruppe? Mithilfe von MAX() könntest du beispielsweise nach dem jeweils höchsten Datum innerhalb einer Gruppe sortieren

SELECT DISTINCTROW MAX(t1.bild_datum) AS max_bild_datum, t2.gallang_name, t2.gallang_gal_id
FROM kogppx07_galerie_galerien_language AS t2
INNER JOIN kogppx07_galerie_bilder AS t1
ON t2.gallang_gal_id = t1.bild_gal_id
WHERE t2.gallang_lang_id=1
GROUP BY t1.bild_gal_id
ORDER BY max_bild_datum
DESC LIMIT 10

24.06.2013 23:16

7 Horst_Braun

Wow. Jetzt blick ich beim Syntax überhaupt nicht mehr durch.

Auf jeden Fall geht das jetzt.

Danke.

Ich liebe diese Forum.

24.06.2013 23:23

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]