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

PHP & Base de données Discussion :

Requête imbriquée dur dur [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut Requête imbriquée dur dur
    Bonsoir ,
    sous phpmyadmin 3.23
    voila je compare deux table nebil_score et nebil_gagnant_concours
    et récupère les noms qui sont dans la table nebil_score mais qui ne se trouve pas en doublons dans la table nebil_gagnant_concours .
    donc je me retrouve avec un certains nombre de pseudo avec leur score
    mais mon but après comparaison et de récupérer uniquement celui qui a le score le plus haut , je ne sais ou introduire le order by score DESC limit 0,1
    ou le MAX score dans cette requête .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requete300 = mysql_query("SELECT nebil_score.pseudo as Spseudo,nebil_score.score as Sscore  
    FROM nebil_score LEFT JOIN nebil_gagnant_concours ON nebil_score.pseudo = nebil_gagnant_concours.pseudo WHERE nebil_gagnant_concours.pseudo Is NULL ");
    {
        $pseudo_jamais_gagner=$var300['Spseudo'];  
        $score_jamais_gagner=$var300['Sscore'];
    }

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Le ORDER BY se met tout à la fin de la requete mySQL
    Et pour le max, j'ai pas très bien compris ce que tu voulais faire avec, mais ce serait un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(.......) ...
    Donc dans le champ SELECT, et il entoure ce que tu veux récupérer...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut
    sa marche pas a la fin , je me demande meme si avec cette requette
    si cette precision est possible

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    A la limite, tu extrait tes deux tableaux avec mysql, tu les enregistre séparément dans deux tableaux PHP différents, et ensuite tu fait tes opérations sur les tableau PHP :

    1. Prendre le tableau scores, enlever toutes les lignes dont la colonne "pseudo" aparrait dans le tableaux des gagnants
    2. Trier ton tableau scores dans l'ordre décroissant et prendre le premier enregistrement

    Et voilà !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut
    j'ai pensé a sa mais je ne sais pas l'ecrire encore , par exemple je ne vois pas comment il faut si prendre pour faire des operations sur les données rapatriés ?

    la selection ?, la comparaison ? , l'elimination ?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Il s'agit du SGBD MySQL, pas de l'applicatif phpMyAdmin.
    Tu parles de requête imbriquée mais, d'une part, je n'en vois pas et, d'autre part, je ne crois pas que MySQL 3.23 supporte ce type de requête.
    Ta requête actuelle a toutes les chances de ne pas te donner ce que tu attends. En effet, tu effectues une jointure sur un champ que tu souhaites NULL, ce qui est incohérent. Je peux me tromper, je n'ai jamais été parfaitement au point sur les JOIN en dehors de l'INNER...

    Pour la requête "avoir les pseudos qui ne sont pas en double dans l'autre table et en récupérer celui au score max" :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `pseudo` AS Spseudo, `score` AS Sscore
    FROM `nebil_score`
    WHERE `pseudo` NOT IN (
       SELECT `pseudo`
       FROM `nebil_gagnant_concours`)
    ORDER BY Sscore DESC
    LIMIT 1;
    Alternative pour les serveurs ne gérant pas les requêtes imbriquées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $sql = 'SELECT `pseudo`
         FROM `nebil_gagnant_concours`';
     
    $result = mysql_query($sql) or die(__LINE__.'<br />'.mysql_error());
     
    $gagnants = array('');
    while($gagnant = mysql_fetch_assoc($result)){
       $gagnants[] = $gagnant['pseudo'];
    }
     
     
    $sql = 'SELECT `pseudo` AS Spseudo, `score` AS Sscore
    FROM `nebil_score`
    WHERE `pseudo` NOT IN ("'.implode('","', $gagnants.'")
    ORDER BY Sscore DESC
    LIMIT 1';
     
    $result = mysql_query($sql) or die(__LINE__.'<br />'.mysql_error());
     
    if($grand_gagnant = mysql_fetch_assoc($result)){
       echo $grand_gagnant['Spseudo'].' ('.$grand_gagnant['Sscore'].')';
    }
    [Pas testé mais l'idée y est]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut
    salut et merci ,
    j'ai une erreur sur la requête :
    Parse error: parse error, unexpected ';' in nebil_tableaux_scores.php on line 196
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $sql = 'SELECT `pseudo`
           FROM `nebil_gagnant_concours`';
     
    $result = mysql_query($sql) or die(__LINE__.'<br />'.mysql_error());
     
    $gagnants = array('');
    while($gagnant = mysql_fetch_assoc($result)){
       $gagnants[] = $gagnant['pseudo'];
    }
    $sql = 'SELECT `pseudo` AS Spseudo, `score` AS Sscore FROM `nebil_score` WHERE `pseudo` NOT IN ("'.implode('","', $gagnants.'")
    ORDER BY Sscore DESC LIMIT 1';  // ligne 196
     
    $result = mysql_query($sql) or die(__LINE__.'<br />'.mysql_error());
     
    if($grand_gagnant = mysql_fetch_assoc($result)){
       echo $grand_gagnant['Spseudo'].' ('.$grand_gagnant['Sscore'].')';
    }

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Flûte, tu n'arrives pas à résoudre un parse error ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = 'SELECT `pseudo` AS Spseudo, `score` AS Sscore
    FROM `nebil_score`
    WHERE `pseudo` NOT IN ("'.implode('","', $gagnants).'")
    ORDER BY Sscore DESC
    LIMIT 1';

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut
    merci Yogui sa marche ,
    je vois meme pas ou elle été

    si tu as le temps tu veux bien m'expliquer en francais cette requette
    je comprend pas le S pour devant pseudo et score les AS
    les implode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT `pseudo` AS Spseudo, `score` AS Sscore
    FROM `nebil_score`
    WHERE `pseudo` NOT IN ("'.implode('","', $gagnants).'")
    ORDER BY Sscore DESC
    LIMIT 1';

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Lol, je sais pas pour le S, je l'ai mis car TU l'as mis dans la première requête de ce sujet... Perso, je le mettrais pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT `pseudo`, `score`
    FROM `nebil_score`
    WHERE `pseudo` NOT IN ("'.implode('","', $gagnants).'")
    ORDER BY Sscore DESC
    LIMIT 1';
    La requête prend tous les pseudos (+ score correspondant) de la table `nebil_score` s'ils n'apparaissent pas dans la table des gagnants.
    La fonction implode() ne sert qu'à remplir le NOT IN () avec une suite de pseudos séparés par des virgules et encadrés de guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NOT IN ("Yogui", "nebil", "superjun")
    Est-ce que cela fonctionne ou bien est-ce que cela te donne le résultat attendu ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Points : 113
    Points
    113
    Par défaut
    merci sa donne le resultat attendu

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

Discussions similaires

  1. [hard core] requête dur dur
    Par heid dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/02/2006, 11h39
  2. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  4. Requêtes imbriquées ?
    Par Ph. B. dans le forum XMLRAD
    Réponses: 7
    Dernier message: 06/05/2003, 13h19
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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