2010-12-28 13 views
1

..PHPのタイムスロットの予約

PHP Booking timeslot

私は、まだdidntの仕事、そのだけ

利用できません予約したタイムスロットを示すよう、私はその解決策を試してみましたid_timeslot 'BY GROUP' を試してみましたしかし、私にエラーを与える、非常に「coelence」を使用する方法を理解していない

table timeslot (id_timeslot integer); 
table doctor (id_doctor integer); 
table bookslot (id_bookslot, id_doctor, id_timeslot integer); 

insert into doctor (id_doctor) 
values (1 = doc_A), (2 = doc_B), (3 = doc_C); 

insert into TimeSlot (id_timeslot) 
values (1 = 10:00:00), (2 = 10:15:00), (3 = 10:30:00), (4 = 10:45:00); 

insert into bookslot (id_doctor,id_timeslot) 
values (1,1), (1,5), (2,1), (2,4), (3,1); 

MySQLのテーブル

参加
$q = $mysqli->query("SELECT * FROM bookslot 
    RIGHT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot 
    LEFT JOIN doctor ON bookslot.id_doctor = doctor.id_doctor "); 

結果をエコー、それが今日の日付と一致するか、他のウェブページ alt text

から結果

while($r = $q->fetch_array(MYSQLI_ASSOC)) : 

echo '<tr>'; 
echo '<td align="center">' . $r['times'] . '</td>'; 

if($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 1): 
    echo '<td><a href="#available" class="booked">booked</a></td>'; 
else : 
    echo '<td><a href="#" class="available">available</a></td>'; 
endif; 

if($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 2): 
    echo '<td><a href="#available" class="booked">booked</a></td>'; 
else : 
    echo '<td><a href="#" class="available">available</a></td>'; 
endif; 

if($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 3): 
    echo '<td><a href="#available" class="booked">booked</a></td>'; 
else : 
    echo '<td><a href="#" class="available">available</a></td>'; 
endif; 

echo '</tr>'; 

endwhile; 

利用可能に設定し、私は結果は次のようになりたい場合は、チェック:

id_timeslot doc_A doc_B doc_C 
---------------------------------------------- 
1   booked  booked  booked 
2   available available available 
3   available available available 
4   available booked  available 
5   booked  available available 

他の解決策をお願いします!

答えて

1

ええと、毎回インデックスを確認してから、テーブルを印刷するようです。これを試してください

while($r = $q->fetch_array(MYSQLI_ASSOC)) : 
    echo '<tr>'; 
    echo '<td align="center">' . $r['times'] . '</td>'; 

    if($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 1): 
     echo '<td><a href="#available" class="booked">booked</a></td>'; 
    elseif($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 2): 
     echo '<td><a href="#available" class="booked">booked</a></td>'; 
    elseif($r['booked_date'] == date('Y-m-d') && $r['id_doctor'] == 3): 
     echo '<td><a href="#available" class="booked">booked</a></td>'; 
    else : 
     echo '<td><a href="#" class="available">available</a></td>'; 
    endif; 

    echo '</tr>'; 
endwhile; 
0

結果セットからデータを取得した後に、スロットごとに1つの行を返すようにクエリを変更するか、配列を再配置してください。

2

SQLテーブルがx、yデータを持つテーブルではないことを認識することが重要です。

PHPの出力に見られるのは、データベースから得られるものです。つまり、1行に1つのファクト(時間、人物)しか格納されないデータを持つリストであり、任意のスロット/人物に対して繰り返されます。

自分でコンパイルし、SQLから行を取得する列を作成する必要があります。 (あなたは厳密なSQLでもそれを行うことができますが、それは問題をより簡単にするとは思わないので、私はそれを残します)

まず、私はあなたに与えるすべての人/スロットの組み合わせの値、SQLの可用性を計算します。

これで、空き状況を計算する必要はなく、計算されたフィールド$ r ['available']を読み取ることができました。

注文は重要です:あなたはそれが必要なので、すべての値を左から右に向かって表示します。 (10時15分、医師A)...]

あなたは2つのループ、1つは行のためのもの、列を作成することもできます。しかし、クエリが変更されているので、あなたはすでにあなたがすべての値を持っていることを知っています。

$prev_slot = 0; 
$firstrow = true; 

while($r = $q->fetch_array(MYSQLI_ASSOC)) : 

$slot = $r['times'] ; 
if($slot != $prev_slot): 
    // new timeslot, so here and only here we create a new row  
    if(!$firstrow): 
     // if needed, close the old:   
     echo '</tr>'; 
     $firstrow = false; 
    endif; 
    echo '<tr>'; 
    echo '<td align="center">' . $r['times'] . '</td>'; 
endif; 

// here we are just moving sideways 
if($r['available']): 
    echo '<td><a href="#" class="available">available</a></td>';   
else : 
    echo '<td><a href="#available" class="booked">booked</a></td>'; 
endif; 
endwhile; 

echo '</tr>'; // close the final row.