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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Aide requête SQL: item n'appartenant pas à une catégorie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Aide requête SQL: item n'appartenant pas à une catégorie

n°1676361
ZeBix
edit > preview
Posté le 24-01-2008 à 17:06:18  profilanswer
 

Bonjour tous,  
 
Ce que je cherche ici, je peux déjà l'obtenir avec des scripts (PHP, etc.) mais je voudrais dans la mesure du possible essayer de l'avoir en une seule requête SQL (aucun problème si celle-ci comporte des requêtes imbriquées) :  
 
Voici la structure des tables (simplifiée pour l'explication) :
 
items
- ID_item
- label
 
categories2items
- ID_item
- ID_category
 
categories
- ID_category
- label
- flag
 
Situation classique: relation n-n entre items et catégories.  "flag" peut être à 0 ou 1.
 
Je voudrais une liste d'items qui, parmi leurs catégories (et ils peuvent en avoir aucune ou plusieurs, donc), n'en aient AUCUNE qui soit flaggée "1".  
 
Exemple :  
Item A : catégories 1 - 2 - 3
Item B : catégories 1 - 3 - 4
Item C : pas de catégories
Item D : catégories 1 - 2 - 5
 
La catégorie 2 est flaggée 1
Je veux donc les items B et C
 

Code :
  1. SELECT items.label FROM items
  2. LEFT OUTER JOIN category2items ON category2items.ID_item = items.ID_item
  3. LEFT OUTER JOIN categories ON (categories.ID_category = category2items.ID_category AND categories.flag <> '1')

me donne tous les items, avec s'ils en ont une, une catégorie pourvu que celle-ci ne soit pas flaggée 1 (j'emploi des outer joins pour prendre les items qui n'ont aucune catégorie).
 
Deux problèmes :  
- Si un item a disons 2 catégories, et que l'une d'elles n'est pas flaggée 1, eh bien l'item est quand même pris
- Un même item apparaîtra autant de fois dans la liste qu'il a de catégories, je voudrais que mon check se résume à savoir si PARMI les catégories, l'une d'elle est flaggé, si oui on prend l'item, si non on le le prend pas. Il ne devrait donc apparaître que une seule fois dans le record set.
 
Voilà je cale un peu, je suppute que cela doit être possible en une requête ... cela m'aiderait énormément !


Message édité par ZeBix le 24-01-2008 à 17:59:43
mood
Publicité
Posté le 24-01-2008 à 17:06:18  profilanswer
 

n°1676375
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-01-2008 à 17:32:31  profilanswer
 

a la bourrin avec un distinct + not exits:

Code :
  1. SELECT DISTINCT items.label FROM items i1
  2.    LEFT OUTER JOIN category2items ci1 ON ci1..ID_item = i1.ID_item
  3.    LEFT OUTER JOIN categories c1 ON (c1.ID_category = ci1.ID_category AND c1.flag <> '1' )
  4.  WHERE NOT EXISTS ( SELECT i2.label FROM items AS i2
  5.    INNER JOIN category2items AS ci2 ON ci2.ID_item = i2.ID_item
  6.    INNER JOIN categories AS c2 ON (c2.ID_category = ci2.ID_category AND c2.flag ='1')
  7. WHERE i2.ID_item = i1.ID_item)

n°1676392
ZeBix
edit &gt; preview
Posté le 24-01-2008 à 17:59:29  profilanswer
 

Rhaa le NOT EXISTS, tellement longtemps que je l'ai plus utilisé, que je l'ai oublié celui-là, merci beaucoup !

 

Le temps d'adapter ça à mes requêtes nettement plus trash, et ça devrait remplir exactement ce que je cherche,

 

merci encore

 

*Edit* : YEAH ça marche ! tu rox anapajari merci bcp ! :jap:


Message édité par ZeBix le 24-01-2008 à 18:09:35

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

  [Résolu] Aide requête SQL: item n'appartenant pas à une catégorie

 

Sujets relatifs
[Resolu] Curseur clignotant n'apparait pas sous IE[Resolu] useDelimiter sans limite
[Resolu] Equivalent de la commande unpack de PHP/Perl en Java[MACRO excel / RESOLU ] creation d hyperliens amenant a des cases
[XML-XSL-HTML] Simplification de données [Résolu][Résolu]Problème avec un menu défilant
Formatage de colonne SQLAide algorithme Ladder (situation industrielle)
Aide algorithme Ladder (situation industrielle)[resolu]image dynamique en php
Plus de sujets relatifs à : [Résolu] Aide requête SQL: item n'appartenant pas à une catégorie


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