2

構築中の EC サイトに商品検索機能を作ろうとしていますが、少し問題があります。

3 つのテーブル (categories、sub_categories、products) があります。

カテゴリ テーブル フィールド: (categoryID、categoryName、active、image)

sub_categories テーブル フィールド: (categoryID、categoryName、parentCatID、active、image)

products テーブル フィールド: (productID、shortDescription、longDescription、image、catID、subCatID、active、price、delivery、weight)

ユーザーが短い説明または長い説明の一部を入力した場合、またはユーザーがカテゴリまたはサブカテゴリ名の一部を入力した場合、それらのカテゴリ内のすべての製品を検索する必要があります。

JOIN を実行するか、複数の SQL クエリを実行するかがわかりません。正直なところ、私は数時間いじっていましたが、実際にはどこにも行き着いておらず、今は設計図に戻って助けを求めています.

私の最初の試みは次のようになりました:

 $catSelect = mysqli_query($con,"SELECT * FROM categories WHERE categoryName LIKE '%{$term}%'"); 
            $row1 = mysqli_fetch_row($catSelect);
 $subCatSelect = mysqli_query($con,"SELECT * FROM sub_categories WHERE categoryName LIKE '%{$term}%' OR parentCatID = '%{$row1[0]}%'");
            $row2 = mysqli_fetch_row($subcatSelect);
            $productSelect = mysqli_query($con,"SELECT * FROM products WHERE short_description LIKE '%{$term}%' OR long_description LIKE '%{$term}%' OR subCatID = '%{$row2[0]}%' OR catID = '%{$row1[0]}%'"); 

私の最終的な試みはこのようになります

mysqli_query($con,"SELECT * FROM products  INNER JOIN categories ON products.catID = categories.categoryID WHERE categories.categoryName LIKE '%{$term}%'") or die(mysqli_error());

誰かが私が使用する必要がある SQL クエリを手伝ってくれませんか?

4

4 に答える 4

3

これを試して:

SELECT
    p.productID
FROM
    products p
LEFT JOIN categories c
    ON c.categoryID = p.catID
LEFT JOIN sub_categories sc
    ON sc.categoryID = p.subCatID
WHERE
    p.shortDescription LIKE '%keyword%'
    OR p.longDescription LIKE '%keyword%'
    OR c.categoryName LIKE '%keyword%'
    OR sc.categoryName LIKE '%keyword%'
于 2013-06-11T09:49:21.323 に答える
2

検索するフィールドをクエリする where 句を使用して、3 つのテーブルすべてで結合を行う必要があります。このようなもの:

select * from 
products
inner join categories on products.catID = categories.categoryID
inner join sub_categories on products.subCatID = sub_categories.categoryID
where
products.shortDescription like '%query%'
or products.longDescription like '%query%'
or categories.categoryName like '%query%'
or sub_categories.categoryName like '%query%'
;

ここで、queryは検索クエリ文字列です。

于 2013-06-11T09:47:00.660 に答える
2

これはあなたに役立つことができます.....

SELECT * FROM products AS  PT 
LEFT JOIN Categories AS CT ON CT.catID = PT.catID
LEFT JOIN sub_categories  AS SCT ON SCT.subCatID = PT.subCatID
WHERE 
  PT.active = 'YES' AND 
  (PT.shortDescription LIKE '%shortDescription%' OR 
   PT.longDescription LIKE '%longDescription%' OR 
   CT.category LIKE '%category%'  OR 
   SCT.categoryID LIKE '%sub category%' )

php varrible を使用して値を入力するだけで、検索結果を取得できます。

于 2013-06-11T10:01:13.510 に答える
0

これには lucene-solr を使用してみませんか?

于 2013-06-11T09:46:11.337 に答える