2015-12-31 2 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>'; 

Но он показывает несколько раз, если наставник имеет несколько классов в тот же день. Я хочу показать, имеет ли он 2 или более классов в аналогичный день (понедельник), а затем показывает все временные интервалы в одной строке. То же самое и для всех дней недели. Как мне это сделать?

ответ

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

Я сделал с некоторыми значениями температуры. , если вы хотите, чтобы он был имплантирован, тогда это полезно для вас.

скопировать код и проверить здесь 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>'; 
Смежные вопросы