2012-03-12 73 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