2012-03-12 70 views
4

最接近的值需要关于以下搜索功能优化的查询为了通过在MySQL

产品表

Product  att1 att2  att3 att4 att5 

p1   1  2   2  3  2 
p2   4  1   1  5  5 
p3   5  3   5  3  2 
p4   4  4   2  1  1 

如果用户搜索ATT1 = 3,ATT2 = 2和ATT3 = 5

然后,我们需要按照所有必需属性的最大可能 评级顺序显示所有记录

注意: - 在第一行中,只有一个pos sible匹配找到。 - 在第二行没有找到, - 在第三排一个找到匹配

因此,基于匹配的数量,我们需要订购的记录, 如果没有找到准确的匹配,然后在搜索 元素放松

+1

也许搜索不是通过'='而是通过'attx> = queryValue - lowRange AND attx <= queryValue + highRange'进行搜索,并将计算的字段添加到等于'attx - queryValue AS distancex',该字段将包含匹配距指定值的距离,您可以使用它进行排序。 – Yaniro 2012-03-12 08:29:43

回答

3
select * from product 
order by (att1 = 3) + (att2 = 2) + (att3 = 5) desc 

这工作,因为在MySQL true1false0,使总结的条件给你的搜索条件匹配的数目。排序desc返回它们“最接近的匹配优先”

+0

只是完美... – 2012-03-12 10:17:51

+0

它不工作.. – Pradeep 2012-03-12 10:46:18

+1

你究竟是什么意思,“它不工作”? – Bohemian 2012-03-12 10:48:45