【问题标题】:MySQL check if result is favouritedMySQL 检查结果是否被收藏
【发布时间】:2014-03-26 02:32:04
【问题描述】:

我有一个显示搜索结果的查询,我想再添加一个字段来检查每个结果是否在另一个表中显示为收藏结果。为简单起见,由于大多数搜索参数只添加了一些 JOIN 和 WHERE,对我的问题并不重要,让我们考虑有一个 results 表,其中包含所有正确的字段:

id | title | description

还有 result_favourites 表:

userid | resultid

这是获取结果的 MySQL 查询(再次为简单起见,没有所有搜索条件):

SELECT id, title, description FROM results

我想要的是这样的(假设用户是#1):

SELECT r.id r.title, r.description, (something here) AS is_favourited
FROM results AS r
RIGHT JOIN result_favourites AS rf ON rf.resultid = r.id
WHERE userid = 1

is_favourited 为 1(result_favourites 中至少有一行 userid 和 resultid 匹配 r.id 和 userid = 1)或 0(没有)。

我尝试使用COUNT(rf.userid) AS is_favourited,但没有成功。欢迎任何帮助!

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    我认为您想要left join,而不是right joinleft join 保留第一个表中的所有行。然后只需检查是否有匹配项:

    SELECT r.id r.title, r.description, (rf.resultid is not null) AS is_favourited
    FROM results r LEFT JOIN
         result_favourite rf
         ON rf.resultid = r.id and
            rf.userid = 1;
    

    【讨论】:

    • 完美,有效!我曾尝试过 LEFT 和 RIGHT,但不同之处在于将 userid =1 从 WHERE 移动到 ON 子句。出于某种原因,在返回 0 结果的地方使用它。
    【解决方案2】:

    试试这个:

    SELECT r.id r.title, r.description, if(rf.userid is null,0,1) AS is_favourited
    FROM results AS r
    left JOIN result_favourites AS rf ON (rf.resultid = r.id)
    WHERE userid = 1
    

    【讨论】:

    • 谢谢 - 虽然我接受了 Gordon 的回答,因为它仅在 userid = 1 为 ON 时才有效,而不是 WHERE(不知道为什么)
    猜你喜欢
    • 2017-07-24
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多