8

假设我有一个 MySQL 表,people. 每条记录都包含各种属性,其中包括favourite_colourcountryage_group

我想做的是通过与一组特定参数的相似性从该表中检索记录。例如,给定“Red”、“United States”和“18-25”,最好的结果是匹配所有三个的记录。这些将是 100% 匹配。

但是,我还想检索匹配两个参数(66% 匹配)或任何一个参数(33% 匹配)的任意组合的记录。此外,我希望能够定义其他比较点(例如underwear_typemarital_status等)。

这个问题有相对有效的解决方案吗?

4

2 回答 2

11

是的,您可以将每个比较,例如favourite_colour='Red'&c,转换为 0 (false) 或 1 (true) 的值——mysql 会隐式执行此操作,但一般来说,您可能需要 CAST( (favourite_colour='Red') AS INTEGER)&c; 那么,你们SUM所有这些,即,

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

首先会给你完美匹配,然后是 2-of-3;易于推广到更多检查!-)

于 2009-06-09T03:29:46.733 回答
0

对于三个第一个很容易:

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

我不明白“比较的附加点”部分,你能解释一下吗?

于 2009-06-09T03:29:36.170 回答