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

Requêtes MySQL Discussion :

Simplifier une imbrication de requêtes


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut Simplifier une imbrication de requêtes
    Bonjour à tous

    Pour savoir s'il y a une correspondance entre mes tables j'imbrique 3 requêtes ! Je suis sur que des personnes experte seront me dire s'il y a une façon plus simple, et moins lourde pour parvenir au même résultat.

    Je but est d'afficher les données de la première requête, et de voir lesquels de ces donnés ont une correspondance ou pas dans et de le mettre en avant a l'affichage (là j'ai coloré en rouge).

    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
    // je fais une recherche et extrait les informations que je vais afficher
    $reponse = mysql_query("SELECT body, oid FROM strings_fr WHERE body LIKE '%".$search."%' AND fam='".$type."' ORDER BY body") or die (mysql_error());
     
    while ($donnees = mysql_fetch_array($reponse))
    {
    	// je cherche une correspondance de oid dans la table list et je récupère mobId
    	$reponse2 = mysql_query("SELECT mobId FROM list WHERE itemId='".$donnees['oid']."' ") or die (mysql_error());
    	while ($donnees2 = mysql_fetch_array($reponse2))
    	{
    		// je cherche une correspondance de mobId dans la table spawn_list
    		$reponse3 = mysql_query("SELECT * FROM spawn_list WHERE npcid='".$donnees2['mobId']."' ") or die (mysql_error());
    		while ($donnees3 = mysql_fetch_array($reponse3))
    		{
    			// si une correspondance est trouvé je vais pouvoir faire la distinction dans mon tableau
    			$present = 'style="color: red;" ';				
    		}
    	}
     
    // les ligne avec correspondance seront affiché en rouge, les autres normalement
    $tableau.= '</td><td><a ' . $present .'href='.$donnees['oid'].'>'.$donnees['body'].'</a></td></tr>';
    J'espère que mes commentaire vous aideront.

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Ba alors, c'est super intéressant pourtant

    Je lis LE SQL de A à Z : 5e partie - les sous-requêtes, la réponse est certainement sous mon nez, mais c'est difficile pour mes deux neurones qui se battent en duel.

    Pour le moment j'ai fais une jointure, mais e pense qu'on peut tout faire en une requête.

    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
    23
    24
    25
    // je fais une recherche et extrait les informations que je vais afficher
    $reponse = mysql_query("SELECT body, oid FROM strings_fr WHERE body LIKE '%".$search."%' AND fam='".$type."' ORDER BY body") or die (mysql_error());
     
    while ($donnees = mysql_fetch_array($reponse))
    {
    		$reponse3 = mysql_query("SELECT * FROM
     
     
    			`droplist` AS d
    				LEFT JOIN
    			`spawn_list` AS s
     
    			ON d.mobId = s.npcid
     
    			WHERE itemId='".$donnees['oid']."'
     
    		") or die (mysql_error());
    		while ($donnees3 = mysql_fetch_array($reponse3))
    		{
    			// si une correspondance est trouvé je vais pouvoir faire la distinction dans mon tableau
    			$present = 'style="color: red;" ';				
    		}
     
    // les ligne avec correspondance seront affiché en rouge, les autres normalement
    $tableau.= '</td><td><a ' . $present .'href='.$donnees['oid'].'>'.$donnees['body'].'</a></td></tr>';

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    en utilisant le même principe, tu devrais pouvoir faire une autre jointure pour tout faire en une requête, non?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Salut,

    J'ai déjà essayé pleins de chose, mais je ne sais pas faire.

    Le but est de faire une requête avec la correspondance strings_fr.oid = droplist.mobId

    Et de savoir s'il y a une correspondance droplist.mobId = spawn_list.npcid, mais sans exclure les résultats sans correspondance.

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    un truc dans ce genre peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select ....
    from droplist as d
    join string_fr as st on st.oid=d.mobId
    left join spaw_list as s on d.modId=s.npcid
    ...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    Et quand il n'y aura pas dégalité entre modId et s.npcid ?


    Citation Envoyé par Sparktacus Voir le message
    sans exclure les résultats sans correspondance.

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    c'est pourquoi on utilise une jointure externe

    Après si cela ne fonctionne pas, merci de nous fournir un jeu d'essai avec le résultat attendu

Discussions similaires

  1. [MySQL] Simplifier une requête
    Par eldorplus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2011, 10h02
  2. [MySQL] Simplifier une requête SQL
    Par maestro982 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 23/05/2010, 13h26
  3. [MySQL] Simplifier une requête
    Par novphp dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 31/01/2009, 12h18
  4. simplifier une requête avec des 'OR'
    Par Spaccio dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/05/2008, 10h06
  5. [SQL] Simplifier une requête SQL ?
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/04/2006, 13h50

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