2010-08-30 56 views
0

我很努力地找出用單表全文加入普通多表查詢的語法。我不能讓我的頭周圍的語法將全文查詢添加到現有查詢

這是現有語法的正常工作:

SELECT * FROM products,categories,sub_categories 
WHERE products.approved = 1 
AND products.main_category = categories.id 
AND products.sub_category = sub_categories.id 

我的努力增添全文沒有削減它。這是我試圖FO搜索使用查詢:

MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
AGAINST ('keyword') AS score FROM products 
WHERE MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword') 

這就是我想出了,但(可能是顯而易見的)原因不明對我來說,它不工作。

SELECT * FROM products,categories,sub_categories 
WHERE products.approved = 1 
AND products.main_category = categories.id 
AND products.sub_category = sub_categories.id 
AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
AGAINST ('keyword') AS score FROM products 
WHERE MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword') 

任何幫助將不勝感激!

回答

0

最低限度,您需要將「分數」移動到SELECT子句中,並將兩個WHERE子句與AND結合使用。

SELECT *, 
    MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
    AGAINST ('keyword') AS score 
FROM products,categories,sub_categories 
WHERE products.approved = 1 
    AND products.main_category = categories.id 
    AND products.sub_category = sub_categories.id 
    AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword') 

我也強烈建議重寫用ANSI整個查詢聯接語法,以使其更易於閱讀:

SELECT *, 
    MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
    AGAINST ('keyword') AS score 
FROM products 
    INNER JOIN categories on products.main_category = categories.id 
    INNER JOIN sub_categories on products.sub_category = sub_categories.id 
WHERE products.approved = 1 
    AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword') 
0

爲感謝堆。即時通訊與PHP和其他語言相當不錯,但與MySQL語法flakey。說實話,當我看着你的代碼時,事情就開始落空了!我可以看到你是如何得出這個結果的。我給它一個旋轉,但它看起來不錯。

0

我該如何添加'order by product_name'到那個?我想這一點,但結果不正確排序

SELECT * FROM products 
INNER JOIN product_categories on products.main_category = product_categories.id 
INNER JOIN product_sub_categories on products.sub_category = product_sub_categories.id 
WHERE products.approved = 1 AND products.main_category = 8 
ORDER BY products.product_name DESC LIMIT 0,25 

然而,這在添加搜索工作

SELECT * , 
MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,product_details) 
AGAINST ('keyword') AS score FROM my_products 
INNER JOIN my_product_categories on my_products.main_category = my_product_categories.id 
INNER JOIN my_product_sub_categories on my_products.sub_category = my_product_sub_categories.id 
WHERE my_products.approved = 1 AND 
MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,product_details) 
AGAINST('bath') ORDER BY my_products.product_name ASC LIMIT 0,25