2014-05-06 19 views
0

美好的一天!獅身人面像產品參數表中搜索(產品屬性)

我在我的獅身人面像搜索中遇到了一些麻煩。我想搜索產品參數,但無法理解我該如何做到這一點。

例如。

Products表

product_id INT 
product_name STRING 

產品PARAMS表

param_id INT 
product_id INT 
param_name STRING 
param_value STRING 

而這一數據,例如:

產品

1 TV 
2 Player 

PARAMS

1 1 Size Big 
2 1 Color Red 
3 1 Weight 3.0 
4 2 Size Small 
5 2 Color Brown 
6 2 Length 20 

我要搜索哪兒尺寸小 OR 顏色是紅色

回答

1

有許多不同的方式的所有產品。也許最簡單的一個:

sql_query = SELECT product_id, product_name, \ 
    GROUP_CONCAT(CONCAT(param_name,'_',param_value)) AS params \ 
    FROM products LEFT JOIN params USING (product_id) \ 
    GROUP BY product_id \ 
    ORDER BY NULL 

(那actully MySQL查詢,但SQL服務器不能是太大區別)

然後就去做(SphinxQL)查詢,如

SELECT * FROM index WHERE MATCH('keyword @params (Size_Small | Color_Red)'); 

(如果你的任何參數有空格,可能需要使用REPLACE改變爲下劃線,將它們保留爲一個單詞 - 或使用「短語語法」)

+0

非常感謝!而且...我可以通過參數值排序查詢,或比較。例如:我需要所有電視,其中屏幕> 24等。 – Dmitriy

+0

不。這使得它們成爲限定全文搜索中完全匹配的限制。對於排序或範圍查詢,需要使用屬性。使用JSON屬性可能是最簡單的,但可能表現不佳,不知道。 – barryhunter