Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1508 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requête multi-tables + DISTINCT ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Requête multi-tables + DISTINCT ...

n°1304766
ptibat
Posté le 13-02-2006 à 21:46:27  profilanswer
 


Boujour :)
 
Bon je suis pas très callé en requetes sql, et là je commence à bloquer sur les requêtes complexes, alors je vous demande de l'aide. :)
 
 
 
J'ai 2 tables :
 
 
liaison_cat_prod

---------------------
| prod_id  |  cat_id |
---------------------
|  19      |  300213 |
|  12      |  300501 |
| 845      |  300503 |
|   1      |  300504 |
| 845      |  300504 |
| 843      |  300504 |
|  18      |  300504 |
----------------------


 
produits

---------------------------------------------
|  id    |         libel   |    description |
---------------------------------------------
|   1    |     produits1   |    description |
|  12    |    produits12   |    description |
|  18    |    produits18   |    description |
|  19    |    produits19   |    description |
| 843    |   produits843   |    description |
| 845    |   produits845   |    description |
---------------------------------------------


 
 
 
Mon problème est que j'aimerai afficher les produits de la catégorie "3005" (donc contenant les sous catégories 300501,300502,etc...) sans avoir de doublons, c'est à dire en affichant 1 seul fois le produit qui pourrai se trouver dans plusieurs catégories (voir le produit 845).
 
Voici la requete que j'ai :

SELECT DISTINCT produits.id,produits.libel,produits.description,liaison_cat_prod.cat_id
    FROM produits,liaison_cat_prod
    WHERE liaison_cat_prod.cat_id LIKE '".$cat."%'
          AND produits.id=liaison_cat_prod.prod_id
          AND produits.actif='1'
    ORDER BY liaison_cat_prod.cat_id ASC LIMIT 20


 
Mais le DISTINCT ne marche et celà m'affiche 2 fois le produits 845 ...  
Comment puis-je y remédier ?
J'essayer de le faire en 2 requete pour voiri, mais j'aurai préféré le faire en  1 seule requete ... :/
 
Merci de votre aide :jap:
 
Au passage, auriez-vous un site ou un tutoriel sur les requêtes complexe ? :)
 
 
 
 
 
 


---------------
flick r
mood
Publicité
Posté le 13-02-2006 à 21:46:27  profilanswer
 

n°1304791
chris500
Posté le 13-02-2006 à 22:11:44  profilanswer
 

Le problème est dans la requête et le distinct
 

Citation :


SELECT DISTINCT produits.id,produits.libel,produits.description,liaison_cat_prod.cat_id
    FROM produits,liaison_cat_prod  
    WHERE liaison_cat_prod.cat_id LIKE '".$cat."%'  
          AND produits.id=liaison_cat_prod.prod_id  
          AND produits.actif='1'  
    ORDER BY liaison_cat_prod.cat_id ASC LIMIT 20


 
Le Cat_Id étant différent pour chaque ligne 845 (300503 ou 300504), le résultat te ramene autant de lignes que Cat_Id
=> il te suffit de retirer le Cat_Id de ta requete.


Message édité par chris500 le 13-02-2006 à 22:12:28
n°1304793
olivthill
Posté le 13-02-2006 à 22:15:39  profilanswer
 

L'attribut DISTINCT concerne la ligne constituée par toutes les colonnes qui sont recherchées. Il ne concerne pas que la première colonne. Le problème ici, c'est la colonne cat_id qui peut prendre deux valeurs différentes, donc, forcément, la requête considèrera que le résultat contient deux lignes différentes qui seront :

845, produits845, description, 300503
845, produits845, description, 300504

Pour n'avoir qu'une seule ligne, il faut faire la même requête sans demander cat_id.
Ou bien adapter la requête pour n'avoir qu'un seul cat_id, par exemple prendre le plus petit quand il y a en plusieurs avec :

SELECT DISTINCT produits.id,
                produits.libel,
                produits.description,
                min(liaison_cat_prod.cat_id)  
    FROM produits,liaison_cat_prod  
    WHERE liaison_cat_prod.cat_id LIKE '".$cat."%'  
          AND produits.id=liaison_cat_prod.prod_id  
          AND produits.actif='1'  
    GROUP BY produits.id,
             produits.libel,
             produits.description
    ORDER BY liaison_cat_prod.cat_id ASC LIMIT 20
 

Edit : Chris500 a été plus rapide, bravo !


Message édité par olivthill le 13-02-2006 à 22:18:43
n°1304802
ptibat
Posté le 13-02-2006 à 22:35:43  profilanswer
 


Génnialll !! Merciiii à vous deux :jap:
 


---------------
flick r

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requête multi-tables + DISTINCT ...

 

Sujets relatifs
Soumettre une requête XMLConnaitre les tables d'une base
Céer un nouveau serveur sous SQL Server 2005probleme requete
[SQL] Requête pour gestion d'un forumAccess 97 vers 2000, transformation requête
[SQL - postgreSQL] Recherche sur des datesConnexion à SQL Server
[Sql] Besoin d'aide pour une requête ( simple pourtant ... ) [résolu] 
Plus de sujets relatifs à : [SQL] Requête multi-tables + DISTINCT ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR