我有一张表格,其中包含我希望在特定日期范围内显示每天统计数据的信息。该表包含以下内容:
CREATE TABLE IF NOT EXISTS `questions` (
`qid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`question_created_date` datetime NOT NULL,
`question_response_date` datetime NOT NULL,
)
我能够使用以下查询显示$ start_date和$ end_date之间每天创建的问题数量。
SELECT COUNT(*) as q_count, DATE(question_created_date) as date FROM questions where question_created_date between "$start_date" and "$end_date" GROUP BY date ORDER BY date asc
我还想列出在同一天回复的主题数量。例如,如果在2011年7月5日有10个新问题和5个问题得到回应,并且在7/6/11有5个新问题和11个问题回复,我希望能够显示:
Date|New|Responded
7/5/11 10 05
7/6/11 05 11
可以通过mysql完成吗?
我知道我可以执行上面列出的查询,然后每天执行另一个查询以获取当天响应的问题数量,但我想知道是否有更简单,更有效的方法在一个查询。
提前致谢。
答案 0 :(得分:1)
这两个日期彼此无关,但从逻辑上讲,响应日期只能大于创建日期。在一个日期进行分组会破坏您可以从另一个日期提取的任何信息,换句话说 - 您将需要两个查询。
返回的字段是相同的 - 计数和日期字段,因此您可以将其作为单个查询调用发出,但它必须作为联合查询完成:
SELECT 'created' as src, count(*) as cnt, DATE(question_created_date) as created ...
UNION
SELECT 'answered' as src, count(*) as cnt, etc...
虚拟'src'列将告诉您哪个内部查询产生了结果,并且union语法允许您将所有内容作为单个查询发出。但是在MySQL中,它仍然被视为两个完全独立的查询,其结果恰好一次性返回。
答案 1 :(得分:0)
你可以使用UNION做这样的事情。 MySQL可能有一个更高效的内置运算符,但这也可以工作:
select main.date, max(qcd), max(qrd) from
(SELECT DATE(question_created_date) as date, count(*) as qcd, 0 as qrd FROM questions
where question_created_date between "$startdate" and "$enddate" GROUP BY date
union
SELECT DATE(question_response_date) as date, 0, count(*) as qrd FROM questions
where question_response_date between "$startdate" and "$enddate" GROUP BY date)
main group by main.date order by main.date asc;