Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec une requête SQL.

Sujet résolu
    13 novembre 2010 à 12:10:24

    Bonjour,

    Je possède une petite BDD, et j'ai un problème avec les résultats d'une requête SQL :(

    Je vous ai fait un petit schéma pour que vous compreniez bien :

    Image utilisateur

    Des objets possèdent tous une catégorie, ensuite ils peuvent posséder (mais pas toujours!) une sous catégorie et une sous sous catégorie.
    Les catégories, sous catégories et sous sous catégories sont reliés entre elles.

    Je voudrais afficher tous les objets, sachant que je veux aussi pouvoir remplir des informations de sous-catégories et sous-sous-catégories pour certains objets...

    Le début de la requête doit donc être :
    SELECT *
    FROM objets, categories, souscategories, soussouscategories
    


    J'arrive bien à afficher les annonces (avec la requête ci-dessous) qui possèdent à la fois catégories, sous-catégories et sous-sous-catégories mais pas celle sans...

    SELECT *
    FROM objets, categories, souscategories, soussouscategories
    WHERE
    	
    objets.idCategorie = categories.idCategorie
    AND objets.idSousCategorie = souscategories.idSousCategorie
    AND objets.idSousSousCategorie = soussouscategories.idSousSousCategorie
    	
    AND categories.idCategorie = souscategories.idCategorie 
    AND souscategories.idSousCategorie = soussouscategories.idSousCategorie
    


    Est ce que quelqu'un sait comment je peux afficher le reste des annonces ?
    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2010 à 16:40:51

      Je pense que le SELECT * doit buger un peut car pour les jointures tu dois définir les noms des colonnes je crois.
      • Partager sur Facebook
      • Partager sur Twitter
        13 novembre 2010 à 17:13:02

        Citation : fozzeuh

        Je pense que le SELECT * doit buger un peut car pour les jointures tu dois définir les noms des colonnes je crois.


        ???

        @Starlogix : Tu utilises la vieille syntaxe des jointures. Si on la traduit en SQL plus récent, ça devrait ressembler à ceci si je ne m'abuse :

        SELECT *
        FROM objets O
        INNER JOIN categories C
            USING (idCategorie)
        INNER JOIN souscategories S
            USING (idSousCategorie)
        INNER JOIN soussouscategories SS
            USING (idSousSousCategorie);
        


        On voit donc que tu as fait des jointures internes alors que tu veux des jointures externes. Il suffit de changer INNER en LEFT OUTER :

        SELECT *
        FROM objets O
        LEFT OUTER JOIN categories C
            USING (idCategorie)
        LEFT OUTER JOIN souscategories S
            USING (idSousCategorie)
        LEFT OUTER JOIN soussouscategories SS
            USING (idSousSousCategorie);
        


        Si cette requête ne répond pas à ce que tu recherchais, donne-nous un jeu d'essai et le résultat attendu pour qu'on puisse t'aider correctement.

        P.S. SELECT *, essaie d'éviter. Écris le nom des colonnes que tu sélectionnes.
        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2010 à 19:42:36

          @Fayden Je ne connaissais pas ces techniques, je me suis renseigné et ça marche parfaitement !
          Merci encore :)
          • Partager sur Facebook
          • Partager sur Twitter

          Problème avec une requête SQL.

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown