Récupération des enregistrements MySQL basé sur un ensemble variable de points de comparaison

StackOverflow https://stackoverflow.com/questions/967985

Question

Disons que j'ai une table MySQL, people. Chaque enregistrement comprend une variété de propriétés, parmi ces favourite_colour, country et age_group.

Ce que je voudrais faire est de récupérer les enregistrements de cette table par leur ressemblance avec un ensemble de paramètres spécifiques. Compte tenu de « Red », « Etats-Unis », et « 18-25 », par exemple, les meilleurs résultats seront les enregistrements qui correspondent à tous les trois. Ceux-ci seraient correspondances à 100%.

Cependant, je voudrais également récupérer les enregistrements qui correspondent à une combinaison de deux paramètres (match 66%), ou tout un paramètre (match de 33%). De plus, je voudrais être en mesure de définir des points supplémentaires de comparaison (par exemple underwear_type, marital_status, etc.).

Y at-il une solution relativement efficace à ce problème?

Était-ce utile?

La solution

Oui, vous pouvez activer chaque comparaison, tels que favourite_colour='Red' etc., en une valeur de 0 (faux) ou 1 (true) - MySQL fera implicitement, mais pour la généralité, vous voudrez peut-être CAST( (favourite_colour='Red') AS INTEGER) & c; puis, vous SUM tous ces domaines, i.e..

SELECT
userId,
SUM( (favourite_colour='Red'),
     (country='US'),
     (age_group='18-25') ) AS match_score
FROM people
WHERE match_score >= 2
ORDER BY match_score DESC

vous donnera matchs parfaits premier, 2-de-3 suivant; facile de généraliser encore plus de contrôles -)

Autres conseils

Pour les trois premiers est facile:

select * from people
where
(case when color = 'Red' then 33 else 0 end + 
case when age_group = '18-25' then 33 else 0 end + 
case when country = 'United States' then 33 else 0 end)>=33

Je ne comprends pas la partie « des points supplémentaires de comparaison », pouvez-vous expliquer?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top