基于一组可变的比较点检索MySQL记录

时间:2009-06-09 03:20:50

标签: php mysql comparison combinations

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

我想要做的是从这个表中检索它们与一组特定参数的相似性。例如,给定“红色”,“美国”和“18-25”,最好的结果将是那些匹配所有三个的记录。这些将是100%匹配。

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

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

2 个答案:

答案 0 :(得分:11)

是的,您可以将每个比较(例如favourite_colour='Red'& c)转换为值0(假)或1(真) - 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比3;很容易概括到更多的检查! - )

答案 1 :(得分: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

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