我只能在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'];
}
?>
我想在H:i:s
中多次获取6:00:00-7:00:00 07:30:00-08:30:00 09:00:00-10:00:00
,并获取像
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
可以在单个查询中完成吗?
使用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
EDIT -按要求从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";
}
?>
您可以使用group by和if()来使用它们,这将沿着
假设你的between(因为我不经常使用)语法是正确的,试试这个:
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