Récupération des enregistrements MySQL basé sur un ensemble variable de points de comparaison
-
13-09-2019 - |
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?
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?