如果用户没有帖子,则在查询结果中显示用户?

时间:2015-05-29 19:25:28

标签: mysql sql

我有一个机器人,它收集某些用户的活动并记录他们在我的某个网站上发布的帖子。我在这个网站上有一个主持人列表,我想用MySQL来返回有关他们活动的信息。目前,我做了以下事情:

SELECT count( num ) AS posts, username
FROM `logs`
WHERE username
IN (
'username1', 'username2', 'username3', 'username4', 'username5', 
)
AND FROM_UNIXTIME( epoch )
BETWEEN "2015-05-26"
AND "2015-05-29"
GROUP BY username
ORDER BY posts DESC
LIMIT 0 , 30 

以上查询的一些示例输出:

username1 100
username2 50
username3 25

我想输出的内容:我该怎么做?

username1 100
username2 50
username3 25
username4 0
username5 0

表格结构:

num (int, key)
username (varchar)
epoch (varchar) 
msg (varchar)

1 个答案:

答案 0 :(得分:2)

我认为在这种情况下适用的IFNULL功能

SELECT IFNULL(count( num ),0) AS posts, username
FROM `logs` ...

如果count的值为null,则帖子将返回0

MySQL有一些限制,使得这样的查询特别困难。要创建一个临时的用户名列表,您需要加入以使查询正常工作,这很难

我知道只有一种方法可以做到这一点。它涉及将数据存储在临时表中,然后使用该表进行查询。

CREATE temporary table temp_users (name VARCHAR(30))

INSERT INTO temp_users (name) VALUES('username 1'),('username 2'),('username 3');

SELECT count( num ) AS posts, temp_username.username
FROM temp_username LEFT JOIN `logs` ON logs.username=temp_username.username
  AND FROM_UNIXTIME( epoch )
  BETWEEN "2015-05-26" AND "2015-05-29"
  GROUP BY username
  ORDER BY posts DESC
  LIMIT 0 , 30) 

以下是一个简化http://sqlfiddle.com/#!9/cc4ef1/11/0

的示例

会议结束时删除该表