2

我有 2 张桌子;article 和 article_shares(一篇文章被分享了多少次)

我想显示用户(id 63)的所有文章以及他们分享文章的次数(这可能是 0)

文章:

article_id - user_id  - title - date

文章分享

article_id

我正在尝试以下操作,但它只返回有共享的一行,但我想显示全部,即使共享数为 0(在这种情况下有 7 篇文章)

SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*) 
from articles a 
join article_shares ash on ash.article_id = a.article_id
where (a.user_id = '63') order by a.article_title asc
4

4 回答 4

4

将您的联接更改为左联接

就像是

SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*)  
from articles a  
left join article_shares ash on ash.article_id = a.article_id 
where (a.user_id = '63') order by a.article_title asc

看看这个例子

SQL 小提琴演示

也可以看看JOIN 简介 – JOIN 基础

于 2012-10-12T05:29:11.987 回答
3

只是做LEFT JOIN而不是JOIN. 它将为没有共享的文章创建 NULL 条目。

于 2012-10-12T05:26:52.910 回答
3

改变你的join条件LEFT JOIN并尝试。即使 article_id 为空,这也会返回文章共享。

于 2012-10-12T05:28:05.630 回答
2

你应该使用 LEFT JOIN

SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*) 
from articles a 
left join article_shares ash on ash.article_id = a.article_id
where (a.user_id = '63') order by a.article_title asc
于 2012-10-12T05:28:04.733 回答