distinct—在mysql中获取重复记录,试图从两个不同的表中获取数据

jjjwad0x  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(303)

我正在做一个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;

(因为我使用pdo从php执行查询,所以在执行时给出了值:userid)
上面的查询假装返回book表中的所有图书,对于每个图书,请查看表users\u books中是否有具有给定userid的记录,如果该记录存在,它将返回default值并在“active”列中返回true。如果记录不存在,它将返回false has default,false为“active”。
我的问题是:当我与同一本书有两个以上的关系,但不同的用户查询返回重复的条目。如果我移除 DISTINCT 如果同一本书有多条记录(但用户id明显不同),查询将返回重复的条目。
我真的不知道如何只返回books表中的记录,并避免重复它们。我一直想用 GROUP BY 为了实现这一点,但不能这样做,因为查询失败时,我使用它。
任何建议或帮助都将不胜感激。非常感谢。

wsxa1bj1

wsxa1bj11#

经过几个小时的工作,我发布了这个,用phpmyadmin测试了8分钟后,我终于找到了避免重复记录的方法。我只需要在join on上添加and和(我不知道这是可能的)。现在我的查询如下所示:

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 AND ub.ub_userid = :userid;
nx7onnlm

nx7onnlm2#

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

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

相关问题