2

我正在尝试在我正在构建的电子商务网站上创建产品搜索功能,但遇到了一些麻烦。

我有 3 个表(类别、子类别、产品)

类别表字段:(categoryID、categoryName、active、image)

sub_categories 表字段:(categoryID, categoryName, parentCatID, active, image)

产品表字段:(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

这可能对你有帮助......

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 回答
2

您需要使用查询要搜索的字段的 where 子句对所有三个表进行连接。像这样的东西:

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 回答
0

你为什么不为此使用 lucene-solr 呢?

于 2013-06-11T09:46:11.337 回答