gpt4 book ai didi

mysql - MySQL 尝试从两个不同的表获取数据时获取重复记录

转载 作者:行者123 更新时间:2023-11-29 10:07:00 25 4
gpt4 key购买 nike

我正在做一个 MySQL 查询,它必须返回表中的所有记录并动态添加两列,一列从其他表中获取值,最后一个值正在评估其他表中是否存在记录并返回 true 或 false取决于它。

让我更好地解释一下:

我有一个表,用于存储有关书籍的信息(bookid、bookname、bookdescription),该表中没有任何重复的记录。我有第二个表,它存储用户和这些书籍之间的关系(它存储对书籍的引用、对用户 ID 的引用(如果这本书是默认书籍)以及对书籍的评级)

这就是我的查询现在的样子:

SELECT DISTINCT b.*,
IF(ub.ub_bookid is not NULL AND ub.ub_userid = :userid , ub.ub_default, 0) AS "default",
IF(ub.ub_bookid is not NULL AND ub.ub_userid = :userid , True, False) AS "visible"
FROM `books` as b LEFT JOIN `users_books` as ub
ON ub.ub_bookid = b.b_id;

(Since I am doing the query from PHP with PDO the value :userid is given at the execution time)

上面的查询假装从 book 表中返回所有书籍,并且对于每本书,查看表 users_books 中是否有给定 userid 的记录,如果存在,它将返回默认值并返回在“事件”列中为 true。如果记录不存在,它将返回 false,默认为 false,“active”为 false。

我的问题:当我与同一本书有超过 2 个关系但用户不同时,查询将返回重复的条目。如果我删除DISTINCT,如果同一本书有多个记录(但用户 ID 明显不同),查询将返回重复的条目。

我不太确定如何只返回与书籍表一样多的记录并避免重复它们。我一直在尝试使用 GROUP BY 来实现此目的,但无法做到这一点,因为当我使用它时查询失败。

任何建议或帮助将不胜感激。非常感谢。

最佳答案

类似的东西(不确定我完全理解你想要什么)?

SELECT b.*,
IF(ub.ub_bookid IS NOT NULL, ub.ub_default, 0) AS 'default',
IF(ub.ub_bookid IS NOT NULL, True, False) AS 'visible'
FROM books b
LEFT JOIN users_books ub ON b.b_id = ub.ub_bookid AND ub.ub_userid = :userid

关于mysql - MySQL 尝试从两个不同的表获取数据时获取重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com