我有一个机器人,它收集某些用户的活动并记录他们在我的某个网站上发布的帖子。我在这个网站上有一个主持人列表,我想用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)
答案 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
的示例会议结束时删除该表