2010-03-12 8 views
1

J'utilise deux tables pour sélectionner les messages entre les utilisateurs. Tableau "messages" pour l'enregistrement des messages et tableau "membres" pour vérifier les données des utilisateurs (sont-ils activés ou supprimés).Requête MySQL - problème avec ordre par

Cette requête fonctionne correctement.

Ce que je dois faire est de lister l'ordre de messsages reçu par le dernier reçu. J'ai essayé de faire avec "ORDER BY messages.id DESC" à la fin de cette requête mais cela n'a pas fonctionné. Tous les messages sont répertoriés à partir du premier reçu.

Ceci est la mysql requête de jointure de table que j'utilise:

sql = "SELECT DISTINCT messages.fromid, 
      messages.readed, 
      messages.fromid, 
      messages.toid , 
      members.id AS pid 
FROM   messages 
INNER JOIN members 
ON    members.id = messages.fromid 
WHERE   messages.toid    = ".$mid." 
AND    members.status    = 7 
AND    messages.kreaded   !='1' 
AND    messages.subject   != 'readed' 
GROUP BY  fromid" 

Est-il possible de le faire?

alt text http://www.freeimagehosting.net/uploads/e12a5b5437.jpg

Répondre

0

Avez-vous une colonne dans la table pour « reçu » ou une colonne avec une sorte d'horodatage? Si vous le faites, vous devriez commander par là.

Si ce n'est pas le cas, veuillez poster toute la structure de la table afin que nous puissions mieux vous aider.

+0

Oui il y a la colonne "sendtime" et j'ai essayé avec "ORDER BY messages.sendtime DESC" mais rien ne change. – Sergio

+0

Avez-vous sélectionné messages.sendtime aussi? S'il n'est pas sélectionné dans votre requête, vous ne pouvez pas le commander. –

+0

oui je l'ai fait mais aucun effet – Sergio

1

Que diriez-vous sonething comme

SELECT DISTINCT messages.fromid, 
      messages.readed, 
      messages.fromid, 
      messages.toid , 
      members.id AS pid 
FROM   messages 
INNER JOIN members 
ON    members.id = messages.fromid 
WHERE   messages.toid    = ".$mid." 
AND    members.status    = 7 
AND    messages.kreaded   !='1' 
AND    messages.subject   != 'readed' 
ORDER BY messages.fromid ASC, 
      messages.id DESC 

OU

SELECT DISTINCT messages.fromid, 
      messages.readed, 
      messages.fromid, 
      messages.toid , 
      members.id AS pid 
FROM   messages 
INNER JOIN members 
ON    members.id = messages.fromid 
WHERE   messages.toid    = ".$mid." 
AND    members.status    = 7 
AND    messages.kreaded   !='1' 
AND    messages.subject   != 'readed' 
ORDER BY messages.fromid ASC, 
      messages.sendtime DESC 

En messages.fromid ASC l'ASC est purement syntaxiquement, comme ORDER BY sans spécifier ASC/DESC suppose ASC.

SELECT * 
FROM TABLE 
ORDER BY COL ASC 

est le même que

SELECT * 
FROM TABLE 
ORDER BY COL 
+0

Non. J'ai essayé les deux. Il énumère toujours le premier message en haut. – Sergio

+1

** Vous savez que ce que vous dites n'a presque aucun sens. ** Montrez-nous quelques données d'entrée, et la sortie expexted, et peut-être nous pouvons jeter un coup d'oeil alors ... –

0

Je ne suis pas expert sql, lorsque vous avez essayé par votre clause ORDER BY, avez-vous ordonné par messages.id ou l'alias "pid" vous avez déclaré dans votre déclaration? Cela pourrait-il avoir un effet sur la commande en ne fonctionnant pas comme prévu?