我只能在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
我可以在一个查询中完成吗?
答案 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";
}
?>