Php 跨3个数据库表进行产品搜索
我试图在我正在建设的一个电子商务网站上创建一个产品搜索功能,但遇到了一点麻烦 我有3个表(类别、子类别、产品) 类别表字段:(categoryID、categoryName、active、image) 子类别表字段:(categoryID、categoryName、parentCatID、active、image) 产品表字段:(productID、shortDescription、longDescription、image、catID、subCatID、active、price、delivery、weight) 如果用户在短描述或长描述的任何部分键入,或者如果用户在类别或子类别名称的任何部分键入,则我会尝试通过搜索查找产品,它应该查找这些类别中的所有产品 我不知道是执行联接查询还是执行多个SQL查询。老实说,我已经修修补补了几个小时,但还没有真正取得任何进展,现在又回到绘图板上寻求帮助 我的第一次尝试是这样的: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
$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超出了注释文本限制,这意味着我不能像我希望的那样解释别名,但是如果您需要关于别名的任何进一步信息,这里有一些基本的列和表别名信息:缩进、缩进、缩进。