[英]MSQL query for displaying results based on the same keywords
我有一个名为cakes的表,其中包含以下列:id,标题,描述,关键字。 我还有一个名为关键字的表格,其中以蛋糕为父。 关键字表包含两列:id和关键字
我需要两个查询: UPDATED
如果有人输入诸如巧克力,榛子,草莓等成分(可以用逗号分隔),则需要查询以搜索包含所有三个关键字的蛋糕并显示结果。 仅显示包含所有三个的蛋糕。 如果没有蛋糕匹配,我需要一条消息说什么也没找到。
我在搜索框中有一个标签,上面写着“查找相似的蛋糕”。 如果有人输入Vanilla Raspberry或example,则查询需要在数据库中找到蛋糕,并将其关键字与其他蛋糕的关键字匹配并显示结果。 仅显示具有相同关键字的蛋糕。
不确定如何编写这些查询。 任何帮助表示赞赏。 谢谢!
如果数据库必须对“关键字”使用定界的长字符串字段,而不是将它们放在行中,那么您将需要使用LIKE运算符
假设您的[keywords]
列的格式如下:
巧克力,甘纳许,草莓
您可以像这样搜索“相似的”蛋糕:
SELECT
columns
FROM
table t
WHERE
t.[keywords] LIKE '%chocolate%'
OR t.[keywords] LIKE '%cheesecake%'
但是,如果您可以更改架构,则可以这样做。 与使用LIKE
通过文本解析数据库相比,搜索归一化的关键字行将更加高效和快捷。
如果您可以创建一个keywords
表 ,该表通过ID引用父表,那么我认为可以使用JOIN
进行相等搜索。
它可能具有三列:Id,ParentId,关键字
编辑:因此,根据您的更新,您可以搜索cakewords
表。
这未经测试,并且可能有一种更有效的方式不使用IN
子句。 但想法是,您知道特定蛋糕的所有关键字ID。 然后,您正在寻找在该集合中具有关键字的其他蛋糕。
SELECT
columns
FROM
cake AS cs
JOIN
cakewords AS csw
ON csw.[cakeid] = cs.[id]
WHERE
csw.[wordid] IN
(SELECT
cw.[wordid]
FROM
cakewords AS cw
JOIN
cakes AS c
ON c.[id] = cw.[cakeid]
WHERE
c.[id] = @pMyCurrenctCakeId
(
EDIT2:这是一个很好的相关问题:
根据内部答案,您可以尝试以下操作:
SELECT DISTINCT
c.[id]
FROM
cakewords AS cw1
INNER JOIN cakewords cw2
ON cw2.[wordid] = cw1.[wordid]
INNER JOIN cake AS c
ON c.[id] = cw.[cakeid]
WHERE
cw1.[cakeid] = @current_cake_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.