我正在做一个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
为了实现这一点,但不能这样做,因为查询失败时,我使用它。
任何建议或帮助都将不胜感激。非常感谢。
2条答案
按热度按时间wsxa1bj11#
经过几个小时的工作,我发布了这个,用phpmyadmin测试了8分钟后,我终于找到了避免重复记录的方法。我只需要在join on上添加and和(我不知道这是可能的)。现在我的查询如下所示:
nx7onnlm2#
一些类似的东西(不确定我完全理解你想要什么)?