PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 26/08/2010 11:53:37

llg
Membre

Requete simple mais complexe

Bonjour,

Je suis désolé pour le titre, j'ai du mal à trouver une formulation correcte pour ce que je souhaite faire :s.

Voici la structure de ma table : good_filtre
object_id, brand_id, filtre_value_id (ce sont tous des int)

et des exemples de donnée associé:

1, 150, 2
1, 150, 3
15, 15, 3
20, 45, 16
44, 150, 3

Alors voici mon probléme :
J'aimerais récupéré, l'object_id si, le filtre_value_id est égale à 2 et à 3.
J'avoue que je ne vois pas comment me passer d'un traitement php, puisqu'à l'heure actuelle tout ce que j'arrive à faire c'est à récupérer les object_id ayant comme filtre_value_id 2 ou 3.

voici ma requête :
SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id IN (1,9)

et je récupère donc :
1
1
15
44

Alors que ce que je souhaiterais récupérer c'est uniquement :
1

J'espère que vous comprenez mon probléme (je ne trouve pas mon explication très clair).
Merci d'avance pour votre temps et l'aide que vous pourrez m'apporter smile

Hors ligne

#2 26/08/2010 12:04:31

gleu
Administrateur

Re : Requete simple mais complexe

Non, en effet, votre explication n'est pas claire du tout. Vous parlez de faire un filtre sur les valeurs 2 et 3 et la requête que vous montrez fait un filtre sur les valeurs 1 et 9. De plus, le contenu exemple que vous nous fournissez ne correspond en rien au résultat de la requête.

Essayez au moins de fournir un exemple cohérent.


Guillaume.

Hors ligne

#3 26/08/2010 12:19:57

llg
Membre

Re : Requete simple mais complexe

Bonjour,

effectivement je me suis trompé dans la requête, elle devrait être :

SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id IN (2,3)


Mais le contenue exemple correspond bien à l'architecture de la table que je décris :s

object_id, brand_id, filtre_value_id
1           , 150       , 2

ma requete ne renvoyant que l'object_id, elle revoie donc bien 1 pour le row d'exemple :s

Hors ligne

#4 26/08/2010 13:33:30

Marc Cousin
Membre

Re : Requete simple mais complexe

SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id IN (2,3)

Est exactement l'expression SQL de :
J'aimerais récupéré, l'object_id si, le filtre_value_id est égale à 2 et à 3.

Pouvez vous expliquer où est le problème ?


Marc.

Hors ligne

#5 26/08/2010 14:09:03

llg
Membre

Re : Requete simple mais complexe

Arf, je suis désolé j'ai vraiment du mal à exprimer ce que je souhaite tongue

j'aimerais récupérer les object_id qui correspondent à un ou plusieurs filtre_value_id.

Or quand j'utilise cette requête :
SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id IN (2,3)

Je récupère les object_id qui sont égaux à filtre_value_id = 2, puis ceux qui sont égaux à un filtre_value_id = 3, et pas uniquement ceux qui sont égaux à 2 et à 3.

donc avec cette requête je peux par exemple récupéré un object_id qui est égale à 2 mais pas également à 3 et inversement.

J'espère que mon probléme est plus clair :s

Hors ligne

#6 26/08/2010 14:52:31

flo
Membre

Re : Requete simple mais complexe

C'est simple alors, il te faut l'intersection des 2 ensembles, pour obtenir les object_id  qui ont une valeur de filtre_value_id égale à 2 ET une valeur égale à 3.

Une solution :

SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id = 2
INTERSECT
SELECT  object_id
FROM     good_filtre
WHERE    filtre_value_id = 3

Hors ligne

#7 26/08/2010 14:59:41

llg
Membre

Re : Requete simple mais complexe

Super ça marche du tonnerre, j'ai vraiment eu du mal à vous expliquer mon probléme, je vous remercie tous les trois pour votre temps smile

Hors ligne

Pied de page des forums