Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1053 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1229190
mphilamp
ForwWweever!
Posté le 23-10-2005 à 21:06:01  profilanswer
 

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
mood
Publicité
Posté le 23-10-2005 à 21:06:01  profilanswer
 

n°1229229
mrbebert
Posté le 23-10-2005 à 22:48:40  profilanswer
 

Non. Ca prend, pour chaque valeur de "user_id", la valeur max de datestamp, mais aussi une valeur (au hasard) de datestamp, forum_id ... ;)

n°1229555
mphilamp
ForwWweever!
Posté le 24-10-2005 à 12:51:20  profilanswer
 

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

n°1229722
mphilamp
ForwWweever!
Posté le 24-10-2005 à 15:37:57  profilanswer
 

..hum mais en fait ca resoufd pas mon blem je vois tjrs ps comment faire pour que ca fonctionne reelement

n°1229750
Beegee
Posté le 24-10-2005 à 15:59:02  profilanswer
 

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
n°1229889
sircam
I Like Trains
Posté le 24-10-2005 à 19:20:39  profilanswer
 

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}
n°1229904
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-10-2005 à 19:34:13  profilanswer
 

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
n°1230867
mphilamp
ForwWweever!
Posté le 25-10-2005 à 18:20:42  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
probleme commande RMICdelphi et ligne de commande
commande script FTP[MySQL] Automatiser un import/export de data entre 2 bases distantes ?
Probleme pour Configurer MySql en Serveur Dedie[MySQL] LOAD DATA LOCAL INFILE
PHP MySql, bases de données etc - comment faire ???Quel est mon host de ma base mysql avec multimania?
MySQL et contrainte d'unicité sur plusieurs colonnesrelation maitre/esclave entre 2 BDD sur MySQL?
Plus de sujets relatifs à : pkoi cette commande mysql ne fait pas ce qu'elle est censée faire ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR