1

検索ページに問題があります。検索したい製品のリストがあります

検索には次を含める必要があります。

  • 製品名 - 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
4

1 に答える 1

1

対戦で concat sintax (私が使用したものと同様) を使用できますか?

いいえ、MATCH() 内で CONCAT_WS() を使用しないでください。列に名前を付けるだけです。

MATCH() への引数は、FULLTEXT インデックス内の列である必要があります。インデックスで定義されているのと同じ順序で、インデックスに定義されているすべての列。

FULLTEXT インデックスは、他のインデックスと同様に、1 つのテーブルの列のみを含めることができます。MySQL には、複数のテーブルにまたがるインデックスはありません。

複数のテーブルを検索する場合は、各テーブルに FULLTEXT インデックスが必要です。そして、テーブルごとに 1 つの 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 クエリの結果にインデックスを付けることができます。

于 2014-03-06T16:54:34.240 に答える