在多个时间范围之间从mysql获取

时间:2014-06-24 10:18:52

标签: php mysql

我只能在mysql中选择两个日期。

<?php
//db connection goes here
$query=mysql_query("select count(*)as total from table where DATE_FORMAT(column,'%H:%i:%s') between '06:00:00' and '07:00:00'")
$data=mysql_fetch_assoc($query);
if($data) {
echo ' '.$data['total'];
}
?>

我想在6:00:00-7:00:00 07:30:00-08:30:00 09:00:00-10:00:00中的多次H:i:s之间获取并获取类似

的报告
               usercount    
06:00 - 07:00   count no of user
07:30 - 08:30   count no of user
09:00 - 10:00   count no of user

我可以在一个查询中完成吗?

2 个答案:

答案 0 :(得分:0)

您可以使用group by和if()来使用它们,但这将是

假设你的中间(因为我不那么用那么多)语法是正确的,试试这个:

select count(*) as `total`,
IF(
   DATE_FORMAT(column,'%H:%i:%s') between '06:00:00' and '07:00:00',
   '06:00 - 07:00',
   IF(
      DATE_FORMAT(column,'%H:%i:%s') between '07:30:00' and '08:30:00',
      '07:30 - 08:30',
      IF(
         DATE_FORMAT(column,'%H:%i:%s') between '09:00:00' and '10:00:00',
         '09:00 - 10:00',
         'Other'
      )
   )
) AS `interval`
from `table`
group by `interval`

如果不起作用,请尝试:

select count(*) as `total`,
IF(
   DATE_FORMAT(column,'%H:%i:%s') between '06:00:00' and '07:00:00',
   '06:00 - 07:00',
   IF(
      DATE_FORMAT(column,'%H:%i:%s') between '07:30:00' and '08:30:00',
      '07:30 - 08:30',
      IF(
         DATE_FORMAT(column,'%H:%i:%s') between '09:00:00' and '10:00:00',
         '09:00 - 10:00',
         'Other'
      )
   )
) AS `interval`
from `table`
group by IF(
   DATE_FORMAT(column,'%H:%i:%s') between '06:00:00' and '07:00:00',
   '06:00 - 07:00',
   IF(
      DATE_FORMAT(column,'%H:%i:%s') between '07:30:00' and '08:30:00',
      '07:30 - 08:30',
      IF(
         DATE_FORMAT(column,'%H:%i:%s') between '09:00:00' and '10:00:00',
         '09:00 - 10:00',
         'Other'
      )
   )
)

http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html

答案 1 :(得分:0)

使用case语句,并使用HAVING忽略其他时间范围(真的是作弊 - 只是想避免重新检查WHERE子句中的时间范围): -

SELECT CASE
            WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '06:00:00' and '07:00:00'
                THEN '6:00:00-7:00:00'
            WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '07:30:00' and '08:30:00'
                THEN '07:30:00-08:30:00'
            WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '09:00:00' and '10:00:00'
                THEN '09:00:00-10:00:00'
            ELSE NULL
        END AS TimeRange,
        COUNT(*)
FROM table
GROUP BY TimeRange
HAVING TimeRange IS NOT NULL

编辑 - 根据要求将其从PHP中删除: -

<?php
$sql = "SELECT CASE
                    WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '06:00:00' and '07:00:00'
                        THEN '6:00:00-7:00:00'
                    WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '07:30:00' and '08:30:00'
                        THEN '07:30:00-08:30:00'
                    WHEN DATE_FORMAT(column,'%H:%i:%s') BETWEEN '09:00:00' and '10:00:00'
                        THEN '09:00:00-10:00:00'
                    ELSE NULL
                END AS TimeRange,
                COUNT(*) AS total
        FROM table
        GROUP BY TimeRange
        HAVING TimeRange IS NOT NULL";
$query = mysql_query($sql);
while($data = mysql_fetch_assoc($query))
{
    echo $data['TimeRange']."\t".$data['total']."\r\n";
}
?>