我在搜索页面上有问题。我有要搜索的产品列表
搜索必须包括:
- 产品名称-Poduse.produs
- 类别-CAGETORII.CAGETORIE
- 变体名称-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
我可以在匹配中使用Concat sintax(就像我使用过的contax)吗?
否,您不得在match()内使用concat_ws()。只需命名列。
要匹配的参数()必须是fullText索引中的列。为索引定义的所有列,按与索引中定义的顺序相同。
与任何索引一样,完整索引只能包含一表的列。MySQL中没有跨越多个表的索引。
如果要搜索多个表,则需要每个表中的完整索引。每个表都需要一个匹配()。
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 search或apache solr。这些工具可以索引任何选择查询的结果,包括带有加入的查询。