Moteur de recherche sql

Résolu/Fermé
Robert - 3 janv. 2011 à 08:16
 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:

1 réponse

coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
3 janv. 2011 à 15:52
Je n'ai pas de code sous la main, mais une suggestion...

Je pense qu'il va te falloir une sous-requête.
Une première requête qui va dénombrer (avec un COUNT()) le nombre de champs relié à chaque annonce.
Puis une seconde requête, dont une "cellule" sera le COUNT de l'étape précédente, que tu pourras utiliser pour classer tes annonces.

Je ne suis pas expert en SQL donc le code ne me vient pas par coeur, mais j'espère t'avoir au moins donné une piste de réflexion... :-S
0
Bonjour,

Avec des COUNT() ça risque de prendre plus de temps et le système n'est donc pas optimisé, merci quand même je viens de trouver la solution.

https://forums.commentcamarche.net/forum/affich-20390469-moteur-de-recherche-sql-complique
0