Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在多个时间范围内从mysql获取数据_Php_Mysql - Fatal编程技术网

Php 在多个时间范围内从mysql获取数据

Php 在多个时间范围内从mysql获取数据,php,mysql,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'];

我只能在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'];
}
?>

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

您可以使用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'
      )
   )
)

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

编辑-根据要求从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";
}
?>

在哪里重叠?我不明白你的意思6:00-7:00 7:30-8:30这里是重叠fwiw,我看不到重叠。是的。这不是重叠。我忽略了它。这是一个缺口。这是故意的吗?我一定会尝试一下,如果成功的话,我会投赞成票。谢谢你的时间。使用
date\u格式有必要吗?在我看来,
hour(column_name)在6到7之间是一个更好的选择。@Ravinder-可能是真的,尽管对于第二个时间范围,一小时本身是不够的。
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
$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";
}
?>