繁体   English   中英

用于基于相同关键字显示结果的MSQL查询

[英]MSQL query for displaying results based on the same keywords

我有一个名为cakes的表,其中包含以下列:id,标题,描述,关键字。 我还有一个名为关键字的表格,其中以蛋糕为父。 关键字表包含两列:id和关键字

我需要两个查询: UPDATED

  1. 如果有人输入诸如巧克力,榛子,草莓等成分(可以用逗号分隔),则需要查询以搜索包含所有三个关键字的蛋糕并显示结果。 仅显示包含所有三个的蛋糕。 如果没有蛋糕匹配,我需要一条消息说什么也没找到。

  2. 我在搜索框中有一个标签,上面写着“查找相似的蛋糕”。 如果有人输入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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM