【问题标题】:Using CONCAT in MATCH AGAINST在 MATCH AGAINST 中使用 CONCAT
【发布时间】:2014-04-09 10:28:10
【问题描述】:

我的搜索页面有问题。 我有一个要搜索的产品列表

搜索必须包括:

  • 产品名称 - 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

【问题讨论】:

  • '".$keyword."' 不是 SQL。
  • 你为什么在MATCH()中使用CONCAT_WS()??
  • @h2ooooooo $keyword 是要搜索的语法
  • @eggyal 你有什么建议?
  • @nickRO87 没关系 - 你说你不能在 PHPMyAdmin 中使用 SQL 因为 PHPMyAdmin 读取 SQL - 而不是 PHP 代码。它不知道'".$keyword."' 是什么,因为它不接触PHP 编译器。如果您在 PHPMyAdmin 中运行查询,您需要确保它们是有效的 SQL - 而不是 PHP。它只被称为“PHPMyAdmin”,因为它是用 PHP 制作的。

标签: php mysql match match-against


【解决方案1】:

我可以在比赛中使用 concat sintax(就像我使用的那样)吗?

不,您不能在 MATCH() 中使用 CONCAT_WS()。只需命名列。

MATCH() 的参数必须是 FULLTEXT 索引中的列。为索引定义的所有列,其顺序与在索引中定义的顺序相同。

与任何索引一样,FULLTEXT 索引只能包含 one 表中的列。 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 查询的结果,包括带有连接的查询。

【讨论】:

  • 感谢您的回答!如果我在多个领域进行这样的搜索,是否可以包含相关性?
  • 只有使用IN NATURAL LANGUAGE MODE才能获得相关性。你为什么不看the documentation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2012-03-15
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多