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的次数)
很好。但是如果我想得到未“合并/分组”在一起的日期的全名,该怎么办?