Вопрос

I am trying to make a small appointment timetable for 5 people for daily use. The only problem I am having now is to get the timetable display all appointment for the same staff into one column. I have tried a few different way but no luck so far. I will post the best two attempt I got.

Below is the example output I got from the code I wrote for the first attempted.

http://jsfiddle.net/yy885/CXcjR/2/

It display the appointment separately as the query for this output is just normal query for that staff on a specified date. My problem is I cannot find a way to combine these 3 records and output it into one column in this timetable. As for now, if I have 5 appointments for each of them then this will display 25 records (25 columns) which is not going to work well. Based on the code I have so far, I can think of a quick way to work around but I prefer not to use it. That will be showing only ONE staff at a time. But this way is difficult for the girl who is going to mark the appointment as she may overlook the timetable and give out wrongly date/time to the customer.

<?php

include("connect.php");//connect to the database.
//$todaydate = date('m/d/Y');
$todaydate = "11/22/2013";
$staffd = "Jerry";
$query = mysql_query('SELECT * FROM appointment2 where date="'.$todaydate.'" AND      staff="'.$staffd.'"');
$num_row = mysql_num_rows ($query);

if ($num_row > 0 ) {
$i=0;
while($i < $num_row){  

$date = mysql_result($query,$i,"date");
$clientid = mysql_result($query,$i,"clientid");
$staff = mysql_result($query,$i,"staff");
$status = mysql_result($query,$i,"status");
$paid = mysql_result($query,$i,"paid");
$comment = mysql_result($query,$i,"comment");

$t0900 = mysql_result($query,$i,"0900");
$t0915 = mysql_result($query,$i,"0915");
$t0930 = mysql_result($query,$i,"0930");
$t0945 = mysql_result($query,$i,"0945");
$t1000 = mysql_result($query,$i,"1000");
$t1015 = mysql_result($query,$i,"1015");
$t1030 = mysql_result($query,$i,"1030");
$t1045 = mysql_result($query,$i,"1045");
$t1100 = mysql_result($query,$i,"1100");
$t1115 = mysql_result($query,$i,"1115");
$t1130 = mysql_result($query,$i,"1130");
$t1145 = mysql_result($query,$i,"1145");
$t1200 = mysql_result($query,$i,"1200");
$t1215 = mysql_result($query,$i,"1215");
$t1230 = mysql_result($query,$i,"1230");
$t1245 = mysql_result($query,$i,"1245");
$t1300 = mysql_result($query,$i,"1300");
$t1315 = mysql_result($query,$i,"1315");
$t1330 = mysql_result($query,$i,"1330");
$t1345 = mysql_result($query,$i,"1345");
$t1400 = mysql_result($query,$i,"1400");
$t1415 = mysql_result($query,$i,"1415");
$t1430 = mysql_result($query,$i,"1430");
$t1445 = mysql_result($query,$i,"1445");
$t1500 = mysql_result($query,$i,"1500");
$t1515 = mysql_result($query,$i,"1515");
$t1530 = mysql_result($query,$i,"1530");
$t1545 = mysql_result($query,$i,"1545");
$t1600 = mysql_result($query,$i,"1600");
$t1615 = mysql_result($query,$i,"1615");
$t1630 = mysql_result($query,$i,"1630");
$t1645 = mysql_result($query,$i,"1645");
$t1700 = mysql_result($query,$i,"1700");
$t1715 = mysql_result($query,$i,"1715");
$t1730 = mysql_result($query,$i,"1730");
$t1745 = mysql_result($query,$i,"1745");
$t1800 = mysql_result($query,$i,"1800");
$t1815 = mysql_result($query,$i,"1815");
$t1830 = mysql_result($query,$i,"1830");
$t1845 = mysql_result($query,$i,"1845");
$t1900 = mysql_result($query,$i,"1900");
$t1915 = mysql_result($query,$i,"1915");
$t1930 = mysql_result($query,$i,"1930");
$t1945 = mysql_result($query,$i,"1945");
$t2000 = mysql_result($query,$i,"2000");
$t2015 = mysql_result($query,$i,"2015");
$t2030 = mysql_result($query,$i,"2030");
$t2045 = mysql_result($query,$i,"2045");


echo       '<table border="1">';
echo       '<tr><td style="word-wrap: break-word">'.$date.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">&nbsp;&nbsp;&nbsp;'.$staff.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t0900.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t0915.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t0930.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t0945.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1000.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1015.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1030.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1045.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1100.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1115.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1130.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1145.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1200.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1215.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1230.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1245.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1300.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1315.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1330.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1345.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1400.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1415.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1430.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1445.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1500.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1515.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1530.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1545.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1600.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1615.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1630.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1645.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1700.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1715.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1730.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1745.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1800.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1815.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1830.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1845.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1900.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1915.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1930.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t1945.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t2000.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t2015.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t2030.'</td></tr>';
echo       '<tr><td style="word-wrap: break-word">'.$t2045.'</td></tr>';
echo       '</table>';

++$i; } } else { echo "No record found"; } 
?>

Second attempted. I rewrite the mysql with just date, time, staff and event. I used concat to put time and event into one string. So the query I used is just calling this, the date and staff's name. Then I put those result into an array and extract them.

Here is the result.

0945 Event A part 1
1115 Event A part 2
1315 Event B part 1
1630 Event B part 2
1745 Event B part 3
1900 Event C part 1
1945 Event C part 2
2015 Event B part 4

But then I dont know what can I do to put them nicely into the timetable. I can put them into a table but then it wont show those empty slots which will make it difficult to read.

Below is the code I used for this attempted.

<?php
include("connect.php");//connect to the database.
$todaydate = "11/22/2013";
$staffd = "Jerry";

$query = 'SELECT CONCAT(time," ",event) FROM appointment3 where date="'.$todaydate.'" AND staff="'.$staffd.'"';
$result = mysql_query($query) or die ("no query");

$result_array = array();
while($row = mysql_fetch_assoc($result))
{
    $new_arr[] = $row['CONCAT(time," ",event)'];    
}
sort($new_arr);
foreach ($new_arr as $value) {
    echo $value."<br />\n";
}
?>

any suggestion are welcome as I still think my way wont work well...

Это было полезно?

Решение

First of all: instead of having 500 lines echoing <tr>...</tr> just loop over them.

If empty windows bother you, just generate them! It's not like they contain anything, so you can do it to fill the missing hours.

If your timetable is stored in associative array, which can be done using something like

$lines = ...;

$hours = [];
foreach ($lines as $line)
{
    $hour = substr($line, 0, 4);
    $hours[$hour] = $line;
}

You can then generate default empty events using:

for ($i = 0; $i < 24; $i ++)
    for ($j = 0; $j < 60; $j += 5)
    {
        $hour = sprintf('%02d%02d', $i, $j);
        if (!isset($hours[$hour]))
            $hours[$hour] = "$hour (empty)";
    }

var_dump($hours);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top