2009-07-25 9 views
0

J'utilise actuellement PHP/MySQL pour sélectionner des données de ma base de données. Ma déclaration actuelle SELECT est:MySQL Select Statement - 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()); 

Il y a des colonnes qui ont le même « thread-id », donc, je me sers du GROUP BY, de sorte que seule colonne « thread-id » est sélectionné. Tout fonctionne bien avec le groupement, cependant, il sélectionne la première colonne 'thread-id', et non la plus récente (ce que je veux).

Par exemple, il y a 4 colonnes, toutes avec le même thread_id:

thread_id unique_id 
    222   1 
    222   2 
    222   3 
    222   4 

Quand je fais GROUP BY, je voudrais pour récupérer celui avec identifiant unique 4 (la colonne la plus récemment créée) , pas l'identifiant unique 1 (la colonne la plus ancienne créée).

Des idées sur la façon d'y parvenir avec mon instruction SELECT? Merci.

+0

Votre requête peut avoir une vulnérabilité d'injection sql parce que vous n'êtes pas votre requête ou PARAMETRAGE en utilisant mysqli_real_escape_string(). –

+0

Merci pour les réponses: Voici ce que je suis actuellement en utilisant: $ data = 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) comme unique_id, tblusers.usrFirst AS first_name, tblusers.usrLast AS nom_famille DE tblpm LEFT OUTER JOIN tblUsers ON tblpm.sender_id = tblusers.usrID OÙ receiver_id = '$ usrID' GROUP BY ID_fichier ORDER BY unique_id DESC ") ou die (mysql_error()); –

+0

Cependant, lorsque j'essaie d'afficher la colonne "content" la plus récente, elle affiche toujours le premier champ "content", pas le plus récent. Comme vous pouvez le voir, j'essaye d'invoquer MAX (tblpm.content), mais cela ne semble pas faire le travail. auriez vous des idées pour faire ça? –

Répondre

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

donc:

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

et bien sûr assurez-vous échapper usrid $ si elle provient du navigateur.

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;