Soucis sur une requête sql.

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 27 Août 2008.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Bonsoir,
    J'ai une petit soucis sur une requête que je ne parviens pas à régler.
    Supposons une table nommé "localisation" composé entre autre d'un champ "departement". Le champs "departement" comporte plusieurs fois le même département.
    id___departement
    1__vendee
    2__loire_atlantique
    3__vendee
    4__loire_atlantique

    Quand je fais ma requête, j'ai forcement tout qui s'affiche alors que je voudrais afficher qu'une seule fois un département même si il est présent plusieurs fois dans la table.
    Est ce possible ? Comment faire ?
    Merci
     
  2. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Un DISTINCT fait sauter les doublons si les tuples sont identiques
    Un GROUP BY departement groupera tes résultats par departement identiques
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Merci YoyoS, je ne connaissais pas :D .
    J'ai essayé avec DISTINCT mais sans succès ... je dois mal m'y prendre à mon avis.
    Ma requête:
    Code:
    <?php
    
    include("data_bd.php");
    
    mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
    mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir 
    
    correctement remplit les donn&eacute;es du fichier data_bd.php.');
    
    //on selectionne l'id et la situation
    $query1 = mysql_query("SELECT id, situation FROM TYPE_DE_LOCATION WHERE situation = 'bord_de_mer' ORDER BY Times DESC");
    
    $monid="";
    $la_situation="";
    
    while($location = mysql_fetch_array($query1))
     {
       $monid = $location['id'];
       $monid.="$id";
    
       $la_situation = $location['situation'];
       $la_situation.="$situation";
       
    //on ne ferme pas la boucle pour selectionner les departements
    //les id retournés affichent uniquement la situation bord_de_mer
    
    $query2 = mysql_query("SELECT departement FROM LOCALISATION  WHERE id = $monid");
    
    
    $le_departement="";
    
    while($localisation = mysql_fetch_array($query2))
     {
    
       $le_departement = $localisation['departement'];
       $le_departement.="$departement";
       
       echo ''.$le_departement.'<br/>';
    
     }
     }
     ?>
    
    J'ai essayé :
    Code:
    $query2 = mysql_query("SELECT DISTINCT departement FROM LOCALISATION  WHERE id = $monid");
    Et
    Code:
    $query2 = mysql_query("SELECT DISTINCT (departement) FROM LOCALISATION  WHERE id = $monid");
    La requête m'affiche 2 fois le même département ..?

    Merci
     
  4. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Bizarre, c'est forcément que tes départements ne sont pas identiques alors. Il n'y a pas un espace dans l'un qu'il n'y aurait pas dans l'autre, ou un truc du genre ?

    Faut pas oublier qu'il y a une boucle, il passe peut-être 2 x et affiche donc 2x l'unique département ^^
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Je viens de vérifier sous mysql, les 2 champs affichés sont identiques, sans espaces ni quoi que se soit d'autre.

    Dans la requête je fais:
    Code:
    $query2 = mysql_query("SELECT DISTINCT departement FROM LOCALISATION  WHERE id = $monid");
    J'ai ajouté en fin de requête:
    Code:
       echo ''.$monid.'-'.$la_situation.'-'.$le_departement.'<br/>';
    Et sa me retourne:
    9-bord_de_mer-Loire_Atlantique
    5-bord_de_mer-Loire_Atlantique

    Les id sont bien différents et pourtant le même département s'affiche 2 fois .. pige pas la ?
    Une suggestion ..?
    Merci

    Edit
    Si je fais directement sous mysql:
    Code:
    SELECT DISTINCT departement FROM `LOCALISATION` 
    sa fonctionne ... j'en déduit que sa coince dans mon code..
     
  6. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    C'est parce qu'avec ça, il fait 2 tours de boucle, il faut t'arranger pour qu'il n'en fasse qu'un:

    Code:
    $query1 = mysql_query("SELECT id, situation FROM TYPE_DE_LOCATION WHERE situation = 'bord_de_mer' ORDER BY Times DESC");
    
    $monid="";
    $la_situation="";
    
    while($location = mysql_fetch_array($query1)) 
     
  7. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Je ne comprend pas! Mes infos sont dans 2 bases différentes. Ma 1ere requête me permet de sélectionner les id qui correspondent à la situation 'bord_de_mer'. La seconde sélectionne les départements en fonction des id de la 1er boucle , et je ne vois vraiment pas comment faire autrement si ce n'est que de modifier entièrement ma base et la vingtaines de fichier codés derrières ... :? .
     
  8. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Un indice, rassembler le tout en une requête ^^

    Code:
    SELECT L.departement, T.situation FROM TYPE_DE_LOCATION T, LOCALISATION L WHERE T.id = L.Id AND T.situation = 'bord_de_mer' ORDER BY T.Times DESC
     
  9. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Sa existe ce genre de requête :?: :) ... bon je dis sa parce que la je ne comprend rien ^^ et que j'aime bien comprendre... Je vais tester sa et décortiquer la chose :).
    Merci YoyoS
     
  10. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Fais une jointure, tu ne travailleras que sur un résultat de base de données et donc une seule boucle, beaucoup plus facile à gérer ;)

    Bonne nuit et à demain.
     
  11. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    La nuit est passé et me revoilà ... hoooo nonnnn ^^.
    J'ai essayé ta requête et je l'ai adopté :wink: , grand merci. Par contre j'y comprend toujours rien ^^.
    Je ne pige pas les T et les L ... ce sont des lettres au pif ?
    Je vais me renseigner sur les (jointure), j'en ai entendu parlé mais je m'y suis jamais intéressé.
     
  12. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    T et L sont des alias pour éviter de devoir retaper les noms de tables entiers T... et LOCALISATION :)
     
  13. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Donc:
    Code:
    SELECT L.departement, T.situation FROM TYPE_DE_LOCATION T, LOCALISATION L WHERE T.id = L.Id AND T.situation = 'bord_de_mer' ORDER BY T.Times DESC
    équivaut à
    Code:
    SELECT L.departement, T.situation FROM TYPE_DE_LOCATION situation, LOCALISATION departement WHERE situation.id = departement.Id AND situation.situation = 'bord_de_mer' ORDER BY situation.Times DESC
    ou à
    Code:
    SELECT LOCALISATION.departement, TYPE_DE_LOCATION.situation FROM TYPE_DE_LOCATION T, LOCALISATION L WHERE TYPE_DE_LOCATION.id = LOCALISATION.Id AND TYPE_DE_LOCATION.situation = 'bord_de_mer' ORDER BY TYPE_DE_LOCATION.Times DESC
    ou ni l'un ni l'autre?


    Je vais abuser mais je ne m'en sort pas sur une autre requête au niveau des jointures. La requête est celle ci:
    Code:
    <?php
    $le_departement=$_GET["departement"];
    
    include("data_bd.php");
    
    mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
    mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier data_bd.php.');
    
    //on selectionne tout les départements par apport au departement transmit par $_GET
    //on fait le trie dans la seconde requête en fonction de la situation
    $query2 = mysql_query("SELECT id, region, ville FROM LOCALISATION WHERE departement = '".$le_departement."' ORDER BY Timestamp DESC");
    
    $lid_en_cour="";
    $la_region="";
    $la_ville="";
    
    while($localisation = mysql_fetch_array($query2))
     {
       $lid_en_cour = $localisation['id'];
       $lid_en_cour.="$id";
    
       $la_region = $localisation['region'];
       $la_region.="$region";
    
       $la_ville = $localisation['ville'];
       $la_ville.="$ville";
       
    //on ne ferme pas la boucle   
    //on selectionne le type de location en fonction des id de la 1ere boucle
    $query1 = mysql_query("SELECT type_de_location, nombre_de_personne FROM TYPE_DE_LOCATION WHERE id = $lid_en_cour AND situation = 'bord_de_mer' ORDER BY Times DESC");
    
    $le_type_de_location="";
    $le_nombre_de_personne="";
    
    while($location = mysql_fetch_array($query1))
     {
    
       $le_type_de_location = $location['type_de_location'];
       $le_type_de_location.="$type_de_location";
       
       $le_nombre_de_personne = $location['nombre_de_personne'];
       $le_nombre_de_personne.="$nombre_de_personne";
       
     }
     }
     ?>
    
    Merci
     
  14. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    ni l'un ni l'autre. Un alias c'est juste un diminutif c'est tout, te prend pas la tête !

    Essaie de comprendre ce que fait la première requête avec jointure que je t'ai fait, après tu sauras faire les suivantes, ça nous évitera de toute te les faire ;)
     
  15. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Mais heuuuu, je veux pas que l'on me fasse tout, je veux juste comprendre comment sa marche et ou est la logique ^^.
    Ceci dit, je me suis trouvé une logique mais je ne suis pas certain que se soit la meilleurs ...

    Bon après quelques touffes de cheveux en moins, j'ai pondus sa:
    Code:
    $query2 = mysql_query("SELECT T.id, T.type_de_location, T.nombre_de_personne, L.region, L.ville FROM LOCALISATION L,
     TYPE_DE_LOCATION T WHERE L.id = T.Id AND T.situation = 'bord_de_mer' AND departement = '$le_departement' ORDER BY L.Times DESC");
    
    ..et sa marche sur mes différents testes :D
    Ceci fait, je veux juste savoir si ma requête te semble correcte (code en trop,mal faite ...) ou je ne sais quoi d'autre sans le faire à ma place, juste m'aiguiller, stp .

    Et pour finir, peut on faire également une jointure sur 3 tables en même temps ?

    Merci
     
  16. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Elle a l'air bien :D Tu utilises et comprend déjà mieux les alias que t'alleur on dirait :D

    Oublie pas l'alias sur celui la, question de clareté:

    Code:
    AND departement 
    Tu peux faire une jointure sur autant de tables que tu veux, après évidemment elles deviennent plus lentes à exécuter, c'est pourquoi il faut mettre des index sur les petits champs souvent utilisés dans les jointures, comme les clés primaires ou référentielles. Maintenant, ça t'évite de faire 3 requêtes, donc c'est un + :)
     
  17. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    J'espère que c'est le cas aussi ... ^^
    Donc :
    Code:
    AND L.departement 
    ... si je ne me plante pas puisque le champ "departement" appartient à la table "LOCALISATION" (merci ^^)

    Si j'ai bien comprit le truc, on peut faire autant de jointure que l'on veut du moment qu'il y a au moins une "concordance" entre elles ?
    Après, plus il y en a, plus sa rame.

    Je suis que tu as fait exprès de me pondre sa sachant que j'allais encore patoger :D (je déconne, mais je capte rien quand même, mais je vais chercher ^^).

    En tout cas, merci de tes réponses :wink:
     
Chargement...
Similar Threads - Soucis requête sql Forum Date
Petit soucis requête sql Développement d'un site Web ou d'une appli mobile 28 Juillet 2011
Soucis sur une requête sql Développement d'un site Web ou d'une appli mobile 28 Janvier 2011
Petit soucis de Requête SQL invalide?? Développement d'un site Web ou d'une appli mobile 23 Mars 2010
Un petit soucis de requête SQL. Développement d'un site Web ou d'une appli mobile 15 Novembre 2009
Soucis sur une requête sql Développement d'un site Web ou d'une appli mobile 16 Septembre 2009
WordPress Soucis 404 suite changement structure permaliens Référencement Google 18 Juin 2019
Soucis d'affichage de publicité AdSense 4 Janvier 2018
soucis d'indexation Demandes d'avis et de conseils sur vos sites 27 Octobre 2017
Soucis d'affichage dans Google ! Référencement Google 22 Avril 2017
Soucis de classement ou incompréhension Problèmes de référencement spécifiques à vos sites 29 Octobre 2015
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice