Moteur de recherche SQL, compliqué !

Résolu/Fermé
Robert - 3 janv. 2011 à 08:22
 Robert - 5 janv. 2011 à 06:00
Bonjour,

Je viens vers vous, car j'ai rencontré un problème qui ne cesse de me casser la tête, je vais essayer de vous expliquer le principe, peut être que quelqu'un a déjà rencontré le même problème.

Je possède deux tables : Annonces et champs

Annonces contient : id,Titre,description
Champs contient : id,champ,id_annonce,valeur

Les deux sont liées par id = id_annonce



Chaque annonce peut avoir plusieurs champs et chaque champ a une valeur.

Exemple :

Table Annonces :
{
'1','Première annonce','une description de l'annonce'
'2','Deuxième annonce','une description de l'annonce2'
'3','Troisième annonce','une description de l'annonce3'
}

et Table Champs:

{
'1','2','2','25'
'2','2','3','40'
'3','1','2','225'
'4','3','1','89'
'4','1','3','52'
'4','2','1','193'
'4','3','2','193'
}


Supposons donc qu'on essaie d'afficher toutes les annonces qui ont le champ 2 d'une valeur sup à 20

Cette requête ne pose pas de problème elle est facile (je l'écris pour vous donner une idée plus claire) :

SELECT DISTINCT A.id, 'Titre' , 'description'
FROM Champs C
INNER JOIN Annonces A ON C.id_annonce= A.id
WHERE (
C.champ=2
AND C.valeur > 20
)


Le problème c'est qu'on j'essaie d'afficher toutes les annonces qui ont deux champs ou plus.

par exemple je veux afficher toutes les annonces qui ont deux champs, le champ 2 d'une valeur supérieur à 20 et le champ 1 d'une valeur supérieur à 70, d'après mon exemple ça devrait m'afficher (id = 2) mais sauf que je ne sais pas comment le faire en SQL si vous pouvez bien m'aider.


Cordialement.
A voir également:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 janv. 2011 à 16:22
Bonjour,

Je te suggère d'utiliser une requête de ce genre-là :

SELECT DISTINCT A.id, 'Titre' , 'description'
FROM Annonces A
INNER JOIN Champ C1 ON C1.id_annonce= A.id AND C1.champ=1
INNER JOIN Champ C2 ON C2.id_annonce= A.id AND C2.champ=2
WHERE (
C1.valeur > 70 AND
C2.valeur > 20
)

Xavier
1
Merci,
ça fonctionne
0