Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跨3个数据库表进行产品搜索_Php_Html_Mysql_Search - Fatal编程技术网

Php 跨3个数据库表进行产品搜索

Php 跨3个数据库表进行产品搜索,php,html,mysql,search,Php,Html,Mysql,Search,我试图在我正在建设的一个电子商务网站上创建一个产品搜索功能,但遇到了一点麻烦 我有3个表(类别、子类别、产品) 类别表字段:(categoryID、categoryName、active、image) 子类别表字段:(categoryID、categoryName、parentCatID、active、image) 产品表字段:(productID、shortDescription、longDescription、image、catID、subCatID、active、price、deliver

我试图在我正在建设的一个电子商务网站上创建一个产品搜索功能,但遇到了一点麻烦

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

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

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

产品表字段:(productID、shortDescription、longDescription、image、catID、subCatID、active、price、delivery、weight)

如果用户在短描述或长描述的任何部分键入,或者如果用户在类别或子类别名称的任何部分键入,则我会尝试通过搜索查找产品,它应该查找这些类别中的所有产品

我不知道是执行联接查询还是执行多个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]}%'"); 
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%'
;
我最后的尝试是这样的

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

有人能帮我完成我需要使用的SQL查询吗?

为什么不使用lucene solr呢?

您需要在所有三个表上进行连接,并使用where子句查询要搜索的字段。大概是这样的:

 $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]}%'"); 
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%'
;
其中
查询
是搜索查询字符串。

尝试以下操作:

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%'

这可能对你有帮助

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输入值,即可获得搜索结果

您的查询尝试(即使错误)将帮助每个人了解您当前的SQL技能水平,并相应地提出解决方案。此外,你表现得越努力,你得到的答案就越好好,编辑以适应你的建议(彻底使用撤销按钮)我只是自己写了一个确切的陈述,你也打败了我。在你的答案出现之前,我到了WHERE子句!不管怎样@Kevlar一旦你有了这个功能,我建议你看看mysql全文搜索,它们更难理解,但在进行这种搜索时,它们是同类搜索的更好选择(即更快,有点忽略诸如“披头士”和“披头士”之类的常用词)在音乐艺术家搜索中,搜索结果与同类搜索结果不同,但全文将忽略“THE”)@Lee关于
全文搜索的好建议:)我一定会调查的1.我现在时间有点紧,我的能力意味着我必须保持它的简单now@Kevlar:当您有多个表名时,通常会使用表别名。因此,每次您想从products表中指定列时,都不用键入“products.column\u name”,而只需使用别名P。您可以在from子句中看到,它说
from products P
(我通常会将
from products写为P
,但“AS”是可选的)。您可以为表、列和数据库创建别名e.c.t.在大多数情况下,我们之所以使用别名,是因为我们懒惰,而且键入
p
比键入
产品快很多倍(这是完全正确和合法的),它们确实有非懒惰的用途too@Kevlar不幸的是,Stackoverflows超出了注释文本限制,这意味着我不能像我希望的那样解释别名,但是如果您需要关于别名的任何进一步信息,这里有一些基本的列和表别名信息:缩进、缩进、缩进。