为什么这个查询不起作用?

时间:2009-08-17 10:58:54

标签: php mysql

我有这个问题:

select count(id) AS num,date_id from table
  where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009' order by date_id DESC;

这应该导致在今天的日期发布所有id,但它只给出一个id(最高的id)。当我从此查询中删除count(id)时,它运行正常。

为什么此计数不适用于此查询?

3 个答案:

答案 0 :(得分:5)

计数通常与GROUP BY配对。你试过GROUP BY date_id吗?

答案 1 :(得分:1)

如果您想选择日期的总计数以及每个date_id

SELECT  date_id, num
FROM    (
        SELECT  COUNT(id) AS num
        FROM    table
        WHERE   date_id >= UNIX_TIMESTAMP('17-08-2009')
                AND date_id < UNIX_TIMESTAMP('18-08-2009')
        )
CROSS JOIN
        table
WHERE   date_id >= UNIX_TIMESTAMP('17-08-2009')
        AND date_id < UNIX_TIMESTAMP('18-08-2009')
ORDER BY
        date_id DESC

答案 2 :(得分:0)

如果在查询中有像COUNT这样的聚合函数,则必须在group by子句中提及任何未聚合的列。这样做的原因是,随着查询的出现,SQL的执行语义并没有多大意义。

这应该适合你:

select count(id) AS num,date_id
from table
where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009'
group by date_id
order by date_id DESC;

此外,由于您刚刚从一个日期开始,因此您不需要order by子句(因为查询只会返回一行。