我想知道是否有简单的方法可以获得我有多少行不同的值(不好解释,我知道)
示例:我有表,为我的博客文章注册视图。我想数一下,有多少人看过文章a和多少b(我有很多文章,我想获得前10篇最受欢迎的文章)
所以有一种简单的方法可以用SQL来实现这一点,目前我使用php数组,我得到了数组中所有不同的行,然后我得到每个数组值有多少行,然后我排序数组和回声前10,但这是太多的查询,我想知道,如果有办法用1个查询做到这一点?
答案 0 :(得分:2)
select
a.article_id,
a.title,
a.date,
/* Make sure to count a relevant view from the *views* table.
-- This makes sure that count returns 0 instead of 1 when
-- the article isn't viewed yet. */
count(v.article_id) as viewcount
from
Article a
/* Using left join here, to also include articles that are not viewed at all.
-- You can change this to an inner join if you don't want to include those. */
left join ArticleView v on v.article_id = a.article_id
group by
/* Group by article id, so count() actually counts per article. */
a.article_id
order by
/* Place the best viewed articles on top. */
count(v.article_id) desc
/* And return only 10 articles at most. */
limit 10
此查询将返回10篇文章,即使没有10篇文章也有。如果您只想返回实际拥有视图的文章,并且您不需要文章表中的其他字段,则可以稍微简化查询:
select
v.article_id,
count(v.article_id) as viewcount
from
ArticleView v
group by
v.article_id
order by
count(v.article_id) desc
limit 10
但第一个查询的优点是您还可以在查询结果中添加'a'
的其他字段,例如标题。因此,这个单一查询实际上可以返回生成整个前10个列表所需的所有信息,而第二个查询只提供一个id列表。
答案 1 :(得分:1)
使用sql分组很容易。
select articleid, count(*) from view_table group by articled
显然,您需要更改表格和字段。