2009-07-25 9 views
0

Ich verwende derzeit PHP/MySQL, um einige Daten aus meiner Datenbank auszuwählen. Meine aktuelle SELECT-Anweisung ist:MySQL Select Anweisung - GROUP BY/Unique

mysql_query("SELECT * FROM tblpm WHERE receiver_id ='$usrID' GROUP BY 
thread_id ORDER BY unique_id DESC") or die(mysql_error()); 

Es gibt einige Spalten, die den gleichen „thread-id“ haben, damit ich die GROUP BY verwendet wird, so dass nur ein „Thread-ID“ Spalte ausgewählt wird. Alles funktioniert gut mit der Gruppierung, aber es wählt die erste "thread-id" -Spalte und nicht die neueste (was ich will).

Zum Beispiel gibt es 4 Spalten alle mit dem gleichen thread_id:

thread_id unique_id 
    222   1 
    222   2 
    222   3 
    222   4 

Als ich die GROUP BY tun, würde ich es wie die mit einzigartiger ID 4 (die zuletzt erstellte Spalte) abrufen , nicht eindeutige ID 1 (die älteste erstellte Spalte).

Alle Ideen, wie das mit meiner SELECT-Anweisung zu erreichen? Vielen Dank.

+0

Ihre Abfrage eine SQL-Injection-Schwachstelle hat, weil Sie nicht Ihre Abfrage oder mit mysqli_real_escape_string Parametrisierung(). –

+0

Danke für die Antworten: Hier ist, was ich bin derzeit mit: Daten $ = mysql_query ("SELECT tblpm.thread_id, tblpm.receiver_id, tblpm.title, MAX (tblpm.content), tblpm.date_sent, tblpm .sender_id, tblpm.read_pref, MAX (tblpm.id) als unique_id, tblusers.usrFirst AS first_name, tblusers.usrLast AS LAST_NAME FROM tblpm LEFT OUTER JOIN tblUsers tblpm.sender_id ON = tblusers.usrID WHERE receiver_id = '$ USRID' GROUP BY thread_id ORDER BY unique_id DESC ") oder sterben (mysql_error()); –

+0

Wenn ich jedoch versuche, die neueste Spalte "Inhalt" anzuzeigen, wird immer noch das erste Feld "Inhalt" angezeigt, nicht das letzte. Wie Sie sehen können, versuche ich MAX (tblpm.content) aufzurufen, aber das scheint die Arbeit nicht zu erledigen. Irgendwelche Ideen, wie man das macht? –

Antwort

3
SELECT thread_id, MAX(unique_id) 
FROM tblpm 
GROUP by thread_id 

so:

mysql_query(<<<END 
SELECT thread_id, MAX(unique_id) 
FROM tblpm 
WHERE receiver_id ='$usrID' 
GROUP by thread_id 
END 
) or die(mysql_error()); 

und natürlich sicherstellen, dass Sie $ USRID entkommen, wenn es aus dem Browser heraus kommt.

0
SELECT thread_id, max(unique_id) 
FROM tblpm 
WHERE receiver_id = '$usrID' 
GROUP BY thread_id; 
0
SELECT DISTINCT thread_id, unique_id 
FROM tblpm 
WHERE receiver_id = '$usrID' 
GROUP BY thread_id 
ORDER BY unique_id DESC;