Seite 1 von 1
MySQL abfrage auf 1 id beschränken
Verfasst: 26.08.2007 13:18
von rox²³
Code: Alles auswählen
$thread_query_string = "SELECT DISTINCT(topid), id, forid, subfor, topid, user, posttime, text, num_edit, date_format(editdate, '%d.%m.%y - %H:%i') AS form_editdate, date_format(posttime, '%d.%m.%y - %H:%i') AS form_posttime FROM ".$praefix."threads WHERE topid='";
$thread_query_string .= implode("' OR topid='", $thread_query_array);
$thread_query_string .= "' ORDER BY posttime DESC LIMIT 0, 10";
Ich möchte das jeweils nur einmal der letzte Datenatz von topid ausgegeben wird aber insgesammt 10 der letzten Eintrage.
$thread_query_string ist eine Array wo alle topids drin sind also insgesammt 10 stück.
Beispiel:
Array ( [0] => 605 [1] => 1297 [2] => 1402 [3] => 58 [4] => 1357 [5] => 1379 [6] => 1257 [7] => 1302 [8] => 1288 [9] => 1385 )
Bekomme das mit DISTINCT einfach nicht hin habe schon alle mögliche Varianten probiert. mit Klammer ohne mit Komma ohne nix geht.
Kennt jemand noch ne bessere Lösung ?
Verfasst: 26.08.2007 13:45
von S2B
Zuerst mal kannst du dein Query vereinfachen: Anstatt diesen ganzen OR-Abfragen kannst du auch einfach so etwas verwenden:
Code: Alles auswählen
"WHERE topid IN('" . implode("', '", $thread_query_array) . "')"
Zur eigentlichen Frage: Eine komplette Lösung ist mir im Moment nicht bekannt, aber vielleicht kannst du das ganze mit MAX() in Verbindung mit HAVING lösen, siehe im
MySQL-Handbuch. Auf jeden Fall ist DISTINCT der falsche Ansatz, da mit DISTINCT nur komplett identische Datensätze ausgeschlossen werden.
Ansonsten gibt es ja immer noch die Möglichkeit, das Query in zwei aufzuteilen (eins zum Auslesen der IDs (mit MAX()) und eins zum Auslesen der Daten).
Verfasst: 27.08.2007 13:53
von rox²³
Ja da muss ich mir mal was zurecht basteln danke