【发布时间】:2014-09-16 06:54:27
【问题描述】:
我有两个表:BOOKS 和 USERS_BOOKS:
书籍:
| ID | BOOKNAME |
|----|----------|
| 1 | Book1 |
| 2 | Book2 |
| 3 | Book3 |
| 4 | Book4 |
| 5 | Book5 |
USERS_BOOKS:
| ID | USERID | BOOKID | STATUS |
|----|--------|--------|--------|
| 1 | 001 | 1 | Read |
| 2 | 001 | 2 | Read |
| 3 | 001 | 3 | Added |
| 4 | 002 | 1 | Added |
| 5 | 002 | 5 | Added |
| 6 | 003 | 2 | Read |
| 7 | 004 | 4 | Read |
http://sqlfiddle.com/#!2/9cff9/1
从这个 sqlfiddle 我可以查询书籍列表和阅读它们的人数。
select BOOKS.ID, BOOKS.BOOKNAME,
SUM(CASE WHEN USERS_BOOKS.STATUS='Read' THEN 1 ELSE 0 END) AS NUM_READ
from BOOKS
LEFT JOIN USERS_BOOKS ON USERS_BOOKS.BOOKID = BOOKS.ID
GROUP BY BOOKS.ID
http://sqlfiddle.com/#!2/9cff9/1
我需要添加到此查询的是我想查看特定用户(USERID 001)是否阅读这些书。所以在第四列中,我想显示我读过第一本书(是),读过第二本书,没有读过第三、第四和第五本书(否)。 (一个人读了第四本书,但那不是我)。
期望的结果:
| ID | BOOKNAME| NUM_READ | DID_I_READ_IT|
|----|---------|----------|--------------|
| 1 | BOOK1 | 1 | YES |
| 2 | BOOK2 | 2 | YES |
| 3 | BOOK3 | 0 | NO |
| 4 | BOOK4 | 1 | NO |
| 5 | BOOK5 | 0 | NO |
【问题讨论】:
-
那是什么?查询中的两个字段?
-
是的,这两个 ?s 是用户 ID 和状态。我在对@Ollie Jones 的回答的评论中澄清了这一点。这是否更清楚?
-
通常使用sqlfiddle.com 来制作这类东西的原型很有帮助。但是您将示例数据呈现为图像,并将示例结果集呈现为 php 转储,因此很难进行试验。如果您提出您想要的结果,它可能会有所帮助。
-
更清晰的问题。谢谢。
-
但是为什么不更新你的问题,得到想要的结果!?!
标签: php mysql pdo group-by aggregate-functions