IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Petit probleme requete SQL


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    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?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    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 ...

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    le soucis est que mon hebergeur ( 1and1 ) est toujours avec MYSQL4.0 ... et il ne gere donc pas les requetes imbriquées... ;(

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    personne ne saurais faire ça sans requete imcriquée ?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    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é !!

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é !!

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  12. #12
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    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é )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Probleme requete sql et code html
    Par needles94000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/03/2006, 18h38
  2. [Access] Probleme requete SQL
    Par kissmytoe dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/02/2006, 16h25
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 10h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 15h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo