Mysql recherche multi-critères

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mysql recherche multi-critères

Re: Mysql recherche multi-critères

par alsab » 22 déc. 2010, 18:53

Oui avec un critère vérifié c'est bon mais je veux que tous les critères soit vérifiés

Re: Mysql recherche multi-critères

par ouckileou » 22 déc. 2010, 18:28

Je ne comprends pas où est le problème, avec les OR, dès que tu as un critère de vérifié ça devrait être bon non ?

Mysql recherche multi-critères

par alsab » 22 déc. 2010, 17:42

Bonjour,
Je souhaite mettre une recherche multi-critères sur un site communautaire, et là je bloque. J'aurais donc besoin de vos lumières.

Je vous explique la situation pour le moment:

J'ai une table user, avec owner / prenom / nom / latitude / longitude.
Et une table critères avec owner / id / values. Où id est égal au n° de critères, par ex id 5 pour les goût musicaux, id 7 pour le type de films etc... et values le style choisis

Donc par exemple pour l'owner n°1:

table user =
1 / pierre / richard / 1.568792 / 3.354862
table criteres =
1 / 5 / 3
1 / 5 / 5
1 / 5 / 8
1 / 7 / 6
1 / 7 / 9

Maintenant mon problème c'est de rechercher les utilisateurs qui se trouve dans une zone géographique, et avec id 5 = 8 et id 7 = 9
Donc ma requête pour le moment c'est:
SELECT tab1.owner FROM users as tab1 INNER JOIN criteres as tab2 ON tab1.owner = tab2.owner WHERE ((tab1.latitude BETWEEN 1 AND 2) AND (tab1.longitude BETWEEN 3 AND 4)) AND ((tab2.id = 5 AND tab2.values = 8) AND (tab2.id = 7 AND tab2.values = 9))
Et là logiquement ça ne me donne rien, il faut que je remplace
((tab2.id = 5 AND tab2.values = 8) AND (tab2.id = 7 AND tab2.values = 9))
par
((tab2.id = 5 AND tab2.values = 8) OR (tab2.id = 7 AND tab2.values = 9))
.
Maintenant ça marche, mais le problème, c'est que je n'ai besoin que seulement un seul des 2 critères soit vérifier.
Où autrement je peux faire un INNER JOIN pour chaque critères. Là pour 2 critères c'est envisageable mais si j'en ai beaucoup plus ça pourrait vite être le bordel.

Donc voilà où j'en suis pour le moment. J'espère avoir était assez clair, et si vous avez une idée ou d'autres solutions je suis preneur.
Merci