Php 使用相同的值对SQL输出进行分组

Php 使用相同的值对SQL输出进行分组,php,mysql,sql,grouping,Php,Mysql,Sql,Grouping,我正在尝试创建一个脚本来显示商店的开业情况。 我想把这些空缺都列在下面。例如,如果星期一、星期二和星期三的开放时间完全相同,我希望将其分组如下: $previous_time = null; $previous_day = null; $consequetive = 0; while($days = mysql_fetch_assoc($get_openings)) { // loop through your rows $days[''] = null; foreach ($d

我正在尝试创建一个脚本来显示商店的开业情况。 我想把这些空缺都列在下面。例如,如果星期一、星期二和星期三的开放时间完全相同,我希望将其分组如下:

$previous_time = null;
$previous_day = null;
$consequetive = 0;
while($days = mysql_fetch_assoc($get_openings)) { // loop through your rows
    $days[''] = null;
    foreach ($days as $day => $time) { // loop through your fields
        if ($day != "id") { // skip the `id` field
            if ($previous_time !== $time) {
                echo $consequetive > 0 ? $previous_day : "";
                echo $previous_day ? ": " : "";
                echo $previous_time === "" ? "Closed" : $previous_time;
                echo $previous_day && $day ? "<br>" : "";
                echo $day;
                $consequetive = 0;
            }
            else {
                echo ++$consequetive == 1 ? " - " : "";
            }
            $previous_time = $time;
            $previous_day = $day;
        }
    }
}

周一至周三:12:00-15:00

星期四:13:00-15:00

星期五:10:00-18:00

星期六:12:00-18:00

星期日:14:00-18:00


当一个工作日一个工作日输出时,它工作得很好,但我不知道如何在相同的开放时间内对工作日进行“分组”

我曾尝试使用
if($time==$time)
,但没有成功。我没有任何其他的想法怎么做

我不想从表本身获取工作日名称。这就是为什么我创建了
$weekdays数组
,以便可以直接在代码中更改工作日名称

我还需要将工作日名称和开放时间分别放在不同的跨距中

这是我的SQL表:

ID |     mon      |     tue      |     wed      |     thu      |     fri      |     sat      |     sun      
1    12:00-15:00    12:00-15:00    12:00-15:00    13:00-15:00    10:00-18:00    12:00-18:00    14:00-18:00
这是我当前的PHP代码:

$get_openings = mysql_query("SELECT * FROM openings WHERE NC_Id='1'");
while($days = mysql_fetch_array($get_openings)) {

   // Loads time only from database
   $mon = $days['mon'];
   $tue = $days['tue'];
   $wed = $days['wed'];
   $thu = $days['thu'];
   $fri = $days['fri'];
   $sat = $days['sat'];
   $sun = $days['sun'];

   $weekdays = array('monday','tuesday','wednesday','thuesday','friday','saturday','sunday');
   $times = array($mon,$tue,$wed,$thu,$fri,$sat,$sun);

   $i = 0;
   foreach($times as $time) {

      while ($i <= 6) {

          if($time == "") {
              echo $weekdays[$i++].": "."Closed<br>";
          }

          else {
              echo $weekdays[$i++].": ".$time."<br>";
          }
       }
    }
}
$get\u openings=mysql\u query(“从NC\u Id='1'的开口中选择*);
而($days=mysql\u fetch\u数组($get\u开口)){
//仅从数据库加载时间
$mon=$days['mon'];
$tue=$days['tue'];
$wed=$days['wed'];
$thu=$days['thu'];
$fri=$days['fri'];
$sat=$days['sat'];
$sun=$days['sun'];
$weekdays=数组(“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日”);
$times=数组($mon、$tue、$wed、$thu、$fri、$sat、$sun);
$i=0;
foreach($倍于$时间){
而($i可以这样尝试:

$previous_time = null;
$previous_day = null;
$consequetive = 0;
while($days = mysql_fetch_assoc($get_openings)) { // loop through your rows
    $days[''] = null;
    foreach ($days as $day => $time) { // loop through your fields
        if ($day != "id") { // skip the `id` field
            if ($previous_time !== $time) {
                echo $consequetive > 0 ? $previous_day : "";
                echo $previous_day ? ": " : "";
                echo $previous_time === "" ? "Closed" : $previous_time;
                echo $previous_day && $day ? "<br>" : "";
                echo $day;
                $consequetive = 0;
            }
            else {
                echo ++$consequetive == 1 ? " - " : "";
            }
            $previous_time = $time;
            $previous_day = $day;
        }
    }
}
$previous\u time=null;
$previous_day=null;
$consequetive=0;
而($days=mysql\u fetch\u assoc($get\u openings)){//循环遍历您的行
$days['']=空;
foreach($day的天数=>$time){//在字段中循环
如果($day!=“id”){//跳过'id'字段
如果($previous_time!==$time){
echo$consequetive>0?$前一天:“;
echo$前一天?:“:”;
echo$previous\u time==“”?“已关闭”:$previous\u time;
回显$previous_day&&$day?”
“:”; 回声$日; $consequetive=0; } 否则{ echo++$consequetive==1?”-“:”; } $previous_time=$time; $previous_day=$day; } } }
1)在while循环之外定义
$weekdays
,因为它不会改变

2) 定义
$mon
$tue
…然后在$times中再次收集它们是没有意义的。您可以直接使用fetch语句中的命名数组

$weekdays = array('mon','tue','wed','thu','fri','sat','sun');
$get_openings = mysql_query("SELECT * FROM openings WHERE NC_Id='1'");

while($days = mysql_fetch_array($get_openings)) {

  $result = array();
  foreach($weekdays as $day){
    $time = $days[$day]==''?'closed':$days[$day];
    if(count($result)>0 and $result[0][1]==$time){
      $result[0][0] = substr($result[0][0],0,3) . '-' . $day;
    } else {
      array_unshift($result,array($day,$time));
    }
  }
  $result = array_reverse($result);
  /* add code to display $result here */
}
在每个循环中,
$result
是一个数组,包含日期名称和打开时间。例如:
数组(数组('mon-wed','12:00-15:00')、数组('thu',…),…),…)

*/

在旁注中,您可以删除
while
语句并递增
$i
变量,然后使用foreach中的键:
foreach($i=>$time的次数)
很好。但是如果我想得到未“合并/分组”在一起的日期的全名,该怎么办?