Mysql select 来自另一个 table 的 sum()
Mysql select sum() from another table
我有这个 tables :
Table:文章
id | title | display |
-----------------------------------
1 | Fkekc | 1 |
2 | ldsdf | 1 |
3 | OTRld | 0 |
4 | QCRSA | 1 |
Table:赞
id | article_id | like | type
----------------------------------------
1 | 1 | 121 | 1
2 | 1 | 652 | 2
3 | 2 | 12 | 1
4 | 1 | 5 | 3
我想得到这个结果:
Article [1] => 778
Article [2] => 12
Article [3] => 0
Article [4] => 0
我在两个 table 之间使用 LEFT JOIN,但是这个 return 记录每个 likes
table。所以我得到了文章1的三个记录
我的代码:
SELECT articles.*,likes.like FROM `articles` LEFT JOIN `likes` ON articles.id=likes.article_id WHERE display='1'
我知道我必须使用 SUM()
但我不知道如何使用它
根据你的回答,我发现我必须使用这个:
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id
但我想在查询中设置过滤器。所以使用这个:
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' && likesSum>='100' GROUP BY articles.id
但是上面的代码没有return任何结果
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id
你做的都对,就是少了一个。你应该使用 group by
SELECT articles.*, likes.like
FROM `articles`
LEFT JOIN `likes` ON articles.id = likes.article_id
WHERE display = '1'
GROUP BY likes.article_id
这种可视化表示非常有助于理解联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
这应该非常适合你..
SELECT articles.id, sum(likes.like) from articles left join likes on (articles.id=likes.article_id) group by articles.id order by articles.id
查看 SUM() 与 GROUP BY 的用法
这是您的查询
SELECT articles.*,COALESCE(sum(likes.like),0) as total_like FROM
`articles` LEFT JOIN `likes` ON articles.id=likes.article_id group by
articles.id
输出为
我有这个 tables :
Table:文章
id | title | display |
-----------------------------------
1 | Fkekc | 1 |
2 | ldsdf | 1 |
3 | OTRld | 0 |
4 | QCRSA | 1 |
Table:赞
id | article_id | like | type
----------------------------------------
1 | 1 | 121 | 1
2 | 1 | 652 | 2
3 | 2 | 12 | 1
4 | 1 | 5 | 3
我想得到这个结果:
Article [1] => 778
Article [2] => 12
Article [3] => 0
Article [4] => 0
我在两个 table 之间使用 LEFT JOIN,但是这个 return 记录每个 likes
table。所以我得到了文章1的三个记录
我的代码:
SELECT articles.*,likes.like FROM `articles` LEFT JOIN `likes` ON articles.id=likes.article_id WHERE display='1'
我知道我必须使用 SUM()
但我不知道如何使用它
根据你的回答,我发现我必须使用这个:
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id
但我想在查询中设置过滤器。所以使用这个:
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' && likesSum>='100' GROUP BY articles.id
但是上面的代码没有return任何结果
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id
你做的都对,就是少了一个。你应该使用 group by
SELECT articles.*, likes.like
FROM `articles`
LEFT JOIN `likes` ON articles.id = likes.article_id
WHERE display = '1'
GROUP BY likes.article_id
这种可视化表示非常有助于理解联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
这应该非常适合你..
SELECT articles.id, sum(likes.like) from articles left join likes on (articles.id=likes.article_id) group by articles.id order by articles.id
查看 SUM() 与 GROUP BY 的用法
这是您的查询
SELECT articles.*,COALESCE(sum(likes.like),0) as total_like FROM
`articles` LEFT JOIN `likes` ON articles.id=likes.article_id group by
articles.id
输出为