pkoi cette commande mysql ne fait pas ce qu'elle est censée faire ? - SQL/NoSQL - Programmation
Marsh Posté le 23-10-2005 à 22:48:40
Non. Ca prend, pour chaque valeur de "user_id", la valeur max de datestamp, mais aussi une valeur (au hasard) de datestamp, forum_id ...
Marsh Posté le 24-10-2005 à 15:37:57
..hum mais en fait ca resoufd pas mon blem je vois tjrs ps comment faire pour que ca fonctionne reelement
Marsh Posté le 24-10-2005 à 15:59:02
Quelle version de mySql ? Une version qui permet les sous-requêtes ?
Un conseil (pour les perfs) : mettre le moins de choses possibles dans HAVING ! Ici, toutes tes conditions peuvent être mises dans une clause WHERE.
Si les sous-requêtes sont possibles :
Code :
|
Marsh Posté le 24-10-2005 à 19:20:39
Pq une partie considérable des posts dans cette cat sont-ils liés à PHP ?
- Si c'est un pb SQL, pas de PHP svp.
- Si c'est un pb PHP, mauvaise cat.
C'est pas juste une question de style : ça dénote surtout une très mauvaise approche et d'une incapacité à isoler un pb élémentaire. On commence par voir si c'est un soucis SQL en n'utilisant QUE du SQL et on poste CETTE PARTIE LA, pas le PHP... Si le query fonctionne, alors on sait que ça vient du PHP et on poste dans l'autre cat !
Marsh Posté le 24-10-2005 à 19:34:13
Sinon, je vois que MySQL une fois de plus ne respecte aucun standard...
Cette requête est fausse et plante sur tous les SGBD de la planète SAUF MySQL biensûr...
Le "datestamp" après le MAX(datestamp) est faux, et il demande à être dans le GROUP BY (obligatoire), tout comme forum_id, thread, user_id, status, body.
Une fonction de regroupement (max, min, avg, etc.) nécessite une clause GROUP BY qui doit porter sur TOUS les champs sauf ceux faisant partie d'un agrégat.
Et du coup, la requête devrait ramener TOUTES les valeurs distinctes du tuple "datestamp, forum_id, thread, user_id, status, body", c'est à dire à priori toute la table.
Marsh Posté le 25-10-2005 à 18:20:42
Beegee a écrit : Quelle version de mySql ? Une version qui permet les sous-requêtes ?
|
ok je vais essayer çà .. ,
edit: le probleme est que ces operations ne se font que sur une seule table .. ! je met "FROM nomdelatable raccourci" alors?
edit2:ok c bon, j'ai réussi , çà marche, merci bcp
Marsh Posté le 23-10-2005 à 21:06:01
SELECT MAX(datestamp), datestamp, forum_id, thread, user_id, status, body FROM {$PHORUM['message_table']} GROUP BY user_id HAVING status=".PHORUM_STATUS_APPROVED." AND user_id in (".$queryarray." )";
c'est censé me prendre , pour chaque utilisateur, son dernier message ...
et ben que neni ca me prends nimporte lequel
Message édité par mphilamp le 23-10-2005 à 21:34:42