Requête assez complexe, need help [PHP] - PHP - Programmation
Marsh Posté le 16-12-2002 à 18:05:55
C'est peut-être faisable en une seule requête, mais dans ton cas, çà n'as aucun intérêt !
Ce que tu veux, c'est des informations sur chaque table qui ne sont pas liées.
Une requête, c'est une question que tu pose à la base de données. Dans ton cas, tu as bien 3 questions, vue que c'est sur 3 tables. Même si c'est la même question et que çà concerne le même critère, c'est quand même 3 questions différentes dans la mesure ou le résultat pour une table n'a strictement aucune incidence sur le résultat pour les autres.
C'est pas la peine de faire compliqué quand c'est pas nécessaire !
Marsh Posté le 16-12-2002 à 18:27:27
C'est clair que ça n'a strictement aucun interet.
De plus, 3 requètes "select count" seront plus rapide qu'une requète bien tordue avec des JOIN.
Marsh Posté le 16-12-2002 à 18:41:46
Joyrock a écrit : Bon voila mon pb, ça fait pas mal de temps que j'ai pas prog en php/mysql et me rappel plus trop si c'est faisable.
|
J'ai rien dit faudrait faire des LEFT JOIN avec une requete IS NOT NULL, trop lourd effectivement
Marsh Posté le 17-12-2002 à 11:49:34
Autre question:
Code :
|
Là il est pas sensé me faire un distinct sur le nom ????
Parceque si j'ai deux nom pareil pour guilde='CdB' et un guilde='FSCdB' ba il me sort qd même les deux, alors que moi je veux le plus récent
Bref moi pas comprendre
Marsh Posté le 17-12-2002 à 12:15:00
Ben un distinct veut dire qu'il va te ramener un seul exemplaire de chaque valeur corespondant à la colone où ce fait le idstinct.
C'est donc normal qu'il te ramène chaque valeur.
Marsh Posté le 17-12-2002 à 12:18:58
joce a écrit : vire le DISTINCT et fait un GROUP BY nom |
il faut aussi qu'il fasse des sum ou autres opérations du genre sur les autres colones s'il veut éviter les problèmes.
Marsh Posté le 17-12-2002 à 12:51:31
omega2 a écrit : il faut aussi qu'il fasse des sum ou autres opérations du genre sur les autres colones s'il veut éviter les problèmes. |
non pas la peine
Marsh Posté le 17-12-2002 à 13:48:15
Le group by nom ça marche mais il me sort pas celui qui est le plus recent, je capte pas pkoi....
(Merci Joce)
Marsh Posté le 17-12-2002 à 13:51:29
Hmmm avec HAVING ça devrait marcher ?
Marsh Posté le 17-12-2002 à 14:20:30
Grumpf je trouve pas, la forumle à mettre dans le having pour qu'il me sorte le nom le plus recent.
Marsh Posté le 17-12-2002 à 15:25:58
joce a écrit : non pas la peine |
Si tu fais un groups by nom sans avoir dit dans la requête comment les colones grade,x,y et niveau doivent être gérer, je vois mal comment la bdd va savoir quel résultat retourner sur ces colones là. J'ai vu des bdd qui te retournaient encore plus de ligne de résultat quand tu fesais un group by dans une requête mal renseigné que la même requête sans le group by.
joyrock > je sais pas si j'a iparfaitement bien compris ce que tu voulais, mais pour avoir le plus récent, c'est peut être un limit 1,1 qu'il manque à la fin de ta requête. (avec mysql ca marche, pas avec tout les autres bdd vu que c'est pas du sql standard)
Marsh Posté le 17-12-2002 à 15:33:40
omega2 a écrit : Si tu fais un groups by nom sans avoir dit dans la requête comment les colones grade,x,y et niveau doivent être gérer, je vois mal comment la bdd va savoir quel résultat retourner sur ces colones là. J'ai vu des bdd qui te retournaient encore plus de ligne de résultat quand tu fesais un group by dans une requête mal renseigné que la même requête sans le group by. |
elle retourne un resultat au pif en fait apparement
Marsh Posté le 17-12-2002 à 15:40:51
omega2 a écrit : Si tu fais un groups by nom sans avoir dit dans la requête comment les colones grade,x,y et niveau doivent être gérer, je vois mal comment la bdd va savoir quel résultat retourner sur ces colones là. J'ai vu des bdd qui te retournaient encore plus de ligne de résultat quand tu fesais un group by dans une requête mal renseigné que la même requête sans le group by. |
non en fait son probleme, c'est que le group by se fait *AVANT* l'order by, donc quand il fait sont ORDER BY nom, datemaj, la colonne nom a deja ete reduite a une seule entree (mysql a pris la premiere qu'il trouvait), donc il est nicke
Marsh Posté le 17-12-2002 à 15:51:11
joce a écrit : |
et un :
Code :
|
ca serait pas mieux?
Marsh Posté le 17-12-2002 à 15:57:07
omega2 a écrit : et un :
ca serait pas mieux? |
j'y ai pense, mais est ce que ca va prendre les colonnes x, y et niveau associe au max ?
Marsh Posté le 17-12-2002 à 16:00:38
je confirme, il ne prend pas les colonnes associees correspondant au max :
mysql> CREATE TABLE pouet (a int(10), b int(10), c int(10)); |
Marsh Posté le 17-12-2002 à 16:14:23
joce a écrit : je confirme, il ne prend pas les colonnes associees correspondant au max :
|
Domage, falais bien tenter quoi.
Marsh Posté le 17-12-2002 à 16:21:33
Avec MySQL-4.1 c'est facile :
mysql> SELECT a as first,b,c FROM pouet WHERE b=(SELECT MAX(b) FROM pouet WHERE a=first); |
Marsh Posté le 17-12-2002 à 16:30:51
Autrement ba tu fais :
Code :
|
Marsh Posté le 18-12-2002 à 01:47:26
Joyrock a écrit : Autre question:
|
select |
Ca devrait aller comme çà non ?
Marsh Posté le 18-12-2002 à 11:56:05
Mara's dad a écrit :
|
mysql> SELECT a,b,c FROM pouet WHERE b=max(b) GROUP BY a,c; |
Marsh Posté le 16-12-2002 à 17:04:18
Bon voila mon pb, ça fait pas mal de temps que j'ai pas prog en php/mysql et me rappel plus trop si c'est faisable.
Voila, j'ai 3 tables, news, tests et preview.
Dans chaque table je veux compter le nombre de news, test ou preview posté par le user "machin", il est identifié par un num unique. Bref au lieu de faire trois requêtes du genre:
Je voudrais faire une seule requête, je crois que c'est gérable avec un join mais me rappel plus trop comment, ça fait une bonne heure que je cherche et je trouve pas