pkoi cette commande mysql ne fait pas ce qu'elle est censée faire ?

pkoi cette commande mysql ne fait pas ce qu'elle est censée faire ? - SQL/NoSQL - Programmation

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 :cry:


Message édité par mphilamp le 23-10-2005 à 21:34:42
Reply

Marsh Posté le 23-10-2005 à 21:06:01   

Reply

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 ... ;)

Reply

Marsh Posté le 24-10-2005 à 12:51:20    

aaaaah ok bah biensur !ok je pige !!!merci bcppp !!!!

Reply

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

Reply

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 :
  1. SELECT maTable1.datestamp,
  2.        maTable1.forum_id,
  3.        maTable1.thread,
  4.        maTable1.user_id,
  5.        maTable1.status,
  6.        maTable1.body
  7. FROM ... maTable1,
  8.      (SELECT user_id, MAX(datestamp) AS max_datestamp
  9.       FROM ...
  10.       GROUP BY user_id) maTable2
  11. WHERE maTable1.status= ...
  12. AND maTable2.user_id IN (...)
  13. AND maTable1.datestamp = maTable2.datestamp;

Message cité 1 fois
Message édité par Beegee le 24-10-2005 à 16:02:37
Reply

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 !
 
:o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

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.


Message édité par Arjuna le 24-10-2005 à 19:35:56
Reply

Marsh Posté le 25-10-2005 à 18:20:42    

Beegee a écrit :

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 :
  1. SELECT maTable1.datestamp,
  2.        maTable1.forum_id,
  3.        maTable1.thread,
  4.        maTable1.user_id,
  5.        maTable1.status,
  6.        maTable1.body
  7. FROM ... maTable1,
  8.      (SELECT user_id, MAX(datestamp) AS max_datestamp
  9.       FROM ...
  10.       GROUP BY user_id) maTable2
  11. WHERE maTable1.status= ...
  12. AND maTable2.user_id IN (...)
  13. AND maTable1.datestamp = maTable2.datestamp;



 
ok je vais essayer çà .. :p,  
 
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 :p


Message édité par mphilamp le 25-10-2005 à 18:56:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed