Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2007, 22h21   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
Par défaut Petit probleme requete SQL

Bonjour à tous,

J'ai ici une requete qui ne fonctionne pas comme je le souhaiterais la voici :

Code :
1
2
3
4
5
SELECT count(DISTINCT sow_joueurs.idjoueurs) AS nbj
FROM sow_joueurs LEFT JOIN sow_joueursquetesterminees ON
sow_joueursquetesterminees.idjoueurs = sow_joueurs.idjoueurs
WHERE  xpjoueurs >= $xpjoueurs
HAVING count( idquetes ) >=$nb
le soucis est que le having n'est pas pris en compte, et que le resultat est le meme que si je fesais :

Code :
1
2
3
SELECT count(DISTINCT sow_joueurs.idjoueurs) AS nbj
FROM sow_joueurs 
WHERE  xpjoueurs >= $xpjoueurs
est ce que quelqu'un sait comment faire pour que mon having soit pris en compte ?
d'avance merci
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 22h36   #2
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
peux tu juste donner la structure des tables en question, idquetes appartient a quelle table, et eventuellemnt un exemple du resultat que tu veux obtenir?
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 22h42   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
SOW_JOUEURS ( idjoueurs, xpjoueurs )
sow_joueursquetesterminees ( #idjoueurs, #idquetes )

SOW_JOUEURS
1 5436
2 123
3 67
4 229
5 643


sow_joueursquetesterminees
1 1
1 2
2 3
2 1
3 1
5 2
5 3
5 1


si je veux compter ceux qui ont fait 2 quetes ou plus, et qui ont plus de 200 d'xp, je devrais obtenir : 2 ...
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 23h10   #4
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
Code :
1
2
3
4
5
6
SELECT count(*)  FROM sow_joueurs sj
JOIN (SELECT idjoueurs FROM sow_joueursquetesterminees 
         GROUP BY idjoueurs 
         HAVING SUM(idquetes)>=$nb) q 
ON q.idjoueurs=sj.idjoueurs
WHERE sj.xpjoueurs>=$xpjoueurs
est ce que un truc comme ça repond à ta question?
J'ai essayé chez moi, ça fonctionne. Dans le cas contraire, dis le moi, je chercherais autre chose.
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 08h51   #5
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
le soucis est que mon hebergeur ( 1and1 ) est toujours avec MYSQL4.0 ... et il ne gere donc pas les requetes imbriquées... ;(
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 15h28   #6
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
personne ne saurais faire ça sans requete imcriquée ?
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 18h03   #7
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
tu fais deux requetes toutes simples cherchant dans la premiere table qui a plus de 200 points, et dans la deuxieme qui a plus de 2 quetes , et apres dans ton appli (php?) tu recoupes les données. C'est un peu lourd, mais je pense que c'est comme ça! Désolé de ne pas pouvoir t'aider plus.

PS: a tout hasard je vais chercher ce qui ce fait avec ta version, mais j'avoue ne l'avoir jamais utilisé !!
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 19h01   #8
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
Code :
1
2
3
4
5
6
7
8
mysql> SELECT sjtt.idj,sum(idq),sj.xp  FROM sjtt JOIN sj ON sj.idj=sjtt.idj AND sj.xp>=200  GROUP BY sjtt.idj HAVING sum(sjtt.idq)>=2;
+------+----------+------+
| idj  | sum(idq) | xp   |
+------+----------+------+
|    1 |        3 | 5436 |
|    5 |        6 |  643 |
+------+----------+------+
2 rows IN SET (0.00 sec)
c'est tout ce que je peux faire pour toi. En requete sql pure sans subselect. Si tu cette requete passe en php, il existe des fonctions pour avoir le nombre de lignes retournées, du genre get_num_rows(). J'espere que ça t'aide un peu quand même!!
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 20h09   #9
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
Code :
1
2
3
4
5
6
SELECT sow_joueurs.idjoueurs, sum(idquetes) , xpjoueurs
FROM sow_joueursquetesterminees
JOIN sow_joueurs ON sow_joueurs.idjoueurs=sow_joueursquetesterminees.idjoueurs
AND sow_joueurs.xpjoueurs>=100  
GROUP BY sow_joueurs.idjoueurs, sow_joueurs.xpjoueurs
HAVING sum(idquetes)>=2
ça ne fonctionne pas chez moi ( enfin ca retourne pas les bons resultats )..
je vais passer a autre chose ...
merci quand meme c'est gentil de ta part de m'avoir aidé !!
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 21h02   #10
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
par simple curiosité, quel résultat obtiens-tu? parce que c'est étrange. Moi avec ta requête j'obtiens ça (avec l'exemple de table ci-dessus:

Code :
1
2
3
4
5
6
7
8
+------+----------+------+
| idj  | sum(idq) | xp   |
+------+----------+------+
|    1 |        3 | 5436 |
|    2 |        4 |  123 |
|    5 |        6 |  643 |
+------+----------+------+
3 rows IN SET (0.00 sec)
bon je vais pas changer ma version de sql juste pour tester.
tu exploites ta base avec php/perl/python?

Sinon tu dois envisager de construire tes tables differement !!
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 22h16   #11
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 3
Points : 3
Code :
1
2
3
4
5
6
SELECT sow_joueurs.idjoueurs, count(idquetes) , xpjoueurs
FROM sow_joueursquetesterminees
JOIN sow_joueurs ON sow_joueurs.idjoueurs=sow_joueursquetesterminees.idjoueurs
AND sow_joueurs.xpjoueurs>=100  
GROUP BY sow_joueurs.idjoueurs, sow_joueurs.xpjoueurs
HAVING count(idquetes)>=2
j'obtiens la meme chose que toi ... ta requete est correct ! mais c'est juste le sum que j'ai remplacé par count...
merci a toi !

j'ee profite pour poser une question a la con ...
la diff entre le JOIN et le LEFT JOIN ? ~~'
encore merci...
cumucuni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 22h42   #12
Membre à l'essai
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 22
Points : 22
Citation:
Envoyé par cumucuni

j'ee profite pour poser une question a la con ...
la diff entre le JOIN et le LEFT JOIN ? ~~'
encore merci...
http://dev.mysql.com/doc/refman/5.0/en/join.html

En gros avec un join (inner join) ta ligne s'affiche si la condition de jointure existe. Avec un left join (ou right join) la ligne s'affiche dans tous les cas, mais avec la valeur NULL dans les champs non renseignés. C'est pas trés clair, mais essaye, tu verras ce que ça te donne (avec un exemple ou la condition de jointure n'est pas toujours vérifié )
raspout81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h11.


 
 
 
 
Partenaires

Hébergement Web