2015-12-31 33 views
0

我正在開發一個項目,其中導師可以保存其課程時間。根據日子他可以看到他的時間。我用的代碼在mysql中獲取類似的行數

$qry = mysqli_query($con, 'select * from users left join time_slot on users.id=time_slot.u_id where users.id=' . $id); 
echo '<table class="table_class" border="2"> 
       <tr> 
       <th class="details">id</th> 
       <th class="details">Date</th> 
       <th class="details">start time</th> 
       <th class="details">End Time</th> 
       </tr>'; 
while ($row = mysqli_fetch_array($qry)) { 
    echo '<tr>'; 
    echo '<td class="details">' . $row['id'] . '</td>'; 
    echo '<td class="details">' . $row['name'] . '</td>'; 
    echo '<td class="details">' . $row['day'] . '</td>'; 
    echo '<td class="details">' . $row['time_from'] . '</td>'; 
    echo '<td class="details">' . $row['time_to'] . '</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

但它顯示多個時間,如果導師在同一天有多個類。 我想顯示他是否在同一天(星期一)有兩個或更多班級,然後是所有時段顯示在單行中。這一週的所有日子也是如此。我該怎麼做?

回答

0

您可以使用GROUP_CONCAT函數。假設你的DDL是類似的東西

create table users(id bigint, name varchar(50)); 
create table time_slot(id bigint, u_id bigint, day datetime, time_from time, time_to time); 

的SQL將如下所示:

select u.id,u.name, ts.day, 
group_concat(ts.time_from, ' - ', ts.time_to ORDER BY ts.time_from, ts.time_to) 
from users u left outer join time_slot ts on u.id = ts.u_id 
group by u.id, u.name, ts.day 
order by u.name, ts.day 

fiddle

0

我已經做了一些臨時值。 如果你想以相同的方式impliment那麼它對你有用。

複製代碼,並在這裏檢查http://phpfiddle.org/

$obj1['id']='1'; 
$obj1['name']='a1'; 
$obj1['day']='asdadh'; 
$obj1['time_from']='1'; 
$obj1['time_to']='1'; 

$obj2['id']='2'; 
$obj2['name']='a2'; 
$obj2['day']='asdad'; 
$obj2['time_from']='1'; 
$obj2['time_to']='1'; 

$obj3['id']='3'; 
$obj3['name']='a2'; 
$obj3['day']='asdad'; 
$obj3['time_from']='1'; 
$obj3['time_to']='1'; 


$arr = Array(); 
$arr[]=$obj1; 
$arr[]=$obj2; 
$arr[]=$obj3; 


echo '<table class="table_class" border="2">'; 
echo '<tr>'; 
echo '<th class="details">id</th>'; 
echo '<th class="details">name</th>'; 
echo '<th class="details">day</th>'; 
echo '<th class="details">start time</th>'; 
echo '<th class="details">End Time</th>'; 
echo '</tr>'; 

foreach($arr as $row) 
{ 
    echo '<tr>'; 
    echo '<td class="details">' . $row['id'] . '</td>'; 
    echo '<td class="details">' . $row['name'] . '</td>'; 
    echo '<td class="details">' . $row['day'] . '</td>'; 
    echo '<td class="details">' . $row['time_from'] . '</td>'; 
    echo '<td class="details">' . $row['time_to'] . '</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

echo "<br><br><br><br><br><br><br>"; 

$dates=Array(); 
$count=0; 
foreach($arr as $id=>$row){ 
    $val = $row['day']; 
    $key = array_search($val,$dates); 
    if(is_numeric($key)){ 
     $arr[$key]['day']=$dates[$key].','.$val; 
     unset($arr[$id]); 
    }else{ 
     $dates[$count]=$val; 
    } 
    $count++; 
} 

// new table 

echo '<table class="table_class" border="2">'; 
echo '<tr>'; 
echo '<th class="details">id</th>'; 
echo '<th class="details">name</th>'; 
echo '<th class="details">day</th>'; 
echo '<th class="details">start time</th>'; 
echo '<th class="details">End Time</th>'; 
echo '</tr>'; 
foreach($arr as $row) 
{ 
    echo '<tr>'; 
    echo '<td class="details">' . $row['id'] . '</td>'; 
    echo '<td class="details">' . $row['name'] . '</td>'; 
    echo '<td class="details">' . $row['day'] . '</td>'; 
    echo '<td class="details">' . $row['time_from'] . '</td>'; 
    echo '<td class="details">' . $row['time_to'] . '</td>'; 
    echo '</tr>'; 
} 
echo '</table>';