2014-03-06 33 views
1

我遇到了搜索頁面的問題。 我的,我要搜索在匹配中使用CONCAT反對

產品列表中搜索必須包括:

  • 產品名稱 - produse.produs
  • 類別 - categorii.categorie
  • 變種的名字 - variante.nume_varianta
  • 變量代碼 - variante.nume_varianta

       SELECT 
        produse.*, variante.*, categorii.categorie 
        FROM produse 
        LEFT JOIN variante ON variante.id_produs=produse.id_produs 
        LEFT JOIN categorii ON categorii.id_categorie=produse.id_categorie 
        LEFT JOIN produse_valori ON produse_valori.id_produs=produse.id_produs 
        WHERE MATCH (CONCAT_WS(produse.produs, variante.varianta_cod ,categorii.categorie, variante.nume_varianta)) AGAINST ('.$keyword.' IN BOOLEAN MODE) and produse.activ=1 
        GROUP BY produse.id_produs 
    

但沒有結果 我得到在phpMyAdmin此錯誤:

#1064 - You have an error in your SQL syntax 
+0

''「。$ keyword。」''不是SQL。 – h2ooooooo

+0

爲什麼在MATCH()中使用'CONCAT_WS()'? – eggyal

+0

@ h2ooooooo $關鍵字是sintax搜索 – nickRO87

回答

1

我可以使用CONCAT sintax(就像我所使用的)對抗比賽?

不,您不能在MATCH()中使用CONCAT_WS()。只需列出這些列。

MATCH()的參數必須是FULLTEXT索引中的列。爲索引定義的所有列,順序與它們在索引中定義的順序相同。

與任何索引一樣,FULLTEXT索引只能包含一個表中的列。 MySQL中沒有跨越多個表的索引。

如果要搜索多個表格,則需要在的每個表中的FULLTEXT索引。你需要一個MATCH()爲每個表。

SELECT 
produse.*, variante.*, categorii.categorie 
FROM produse 
LEFT JOIN variante ON variante.id_produs=produse.id_produs 
LEFT JOIN categorii ON categorii.id_categorie=produse.id_categorie 
LEFT JOIN produse_valori ON produse_valori.id_produs=produse.id_produs 
WHERE 
produse.activ=1 
AND (
    MATCH(produse.produs) AGAINST('.$keyword.' IN BOOLEAN MODE) 
    OR MATCH(variante.varianta_cod, variante.nume_varianta) AGAINST('.$keyword.' IN BOOLEAN MODE) 
    OR MATCH(categorii.categorie) AGAINST('.$keyword.' IN BOOLEAN MODE) 
) 
GROUP BY produse.id_produs 

如果你需要跨越一個表的全文索引,你必須使用一個不同的全文索引工具,如Sphinx SearchApache Solr。這些工具可以索引任何SELECT查詢的結果,包括帶連接的查詢。

+0

謝謝你的回答!如果我在多個字段中像這樣搜索,我可以包括相關性嗎? – nickRO87

+1

只有使用'IN NATURAL LANGUAGE MODE'才能獲得相關性。你爲什麼不閱讀[文檔](http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html)? –