免責事項:まだ初心者です。
私は、役割によってフィルタリングされた、現在シフトしているはずの人を示す小さなスクリプトを作成しています。これらのシフトは真夜中を超えます。現在のところ、時間と役割はハードコーディングされていますが、後でユーザーが両方を指定できるようにする予定です(したがって、NOW()などを使用しないのはなぜですか)。
したがって、以下のデータを前提として、月曜日の午後4時30分で、スケジュールどおりの果物を知りたい場合、このスクリプトを実行すると、次のようにエコーアウトされます。
Apple
Banana
ただし、以下のコードを以下のテーブルで実行すると、ほとんどの場合、テーブル全体が選択されます。クエリ自体に問題があることは確かですが、徹底するために残りを含めました。私は日と役割自体だけを選択することをテストしました、そしてそれはうまくいきます、しかしそれが時間を選択する方法の何かが誤って真であると評価します。何か提案をいただければ幸いです。
これが私のテーブルの例です:
+----------+-------------+----------+----------+-------------+
| Name | Days | Start | End | Role |
+----------+-------------+----------+----------+-------------+
| Apple | Sun,Mon,Tue | 15:30:00 | 20:00:00 | Fruit |
| Banana | Mon,Tue,Wed | 16:00:00 | 20:30:00 | Fruit |
| Cheese | Mon,Tue,Wed | 08:30:00 | 10:30:00 | Dairy |
| Carrot | Fri,Sat,Sun | 22:00:00 | 07:00:00 | Vegetable |
+----------+-------------+----------+----------+-------------+
これが私のコードです。何も残されていません。
<?php
date_default_timezone_set('Etc/GMT+6'); // Set default time zone
$time = date("H:i:s"); // Time with seconds in a 24-hour, leading zero format: i.e. 07:00:00 or 15:30:00
$today = date("D"); // Today, in a three-letter format: i.e. Mon, Tue
$role = "Fruit";
$username="example-username";
$password="example-password";
$database="example-database";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT *
FROM work
WHERE `days` LIKE '%$today%' AND
`role` LIKE '%$role%' AND
(start > end AND ('$time' < end OR '$time' > start)) OR
('$time' BETWEEN start AND end)";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=0;
while ($i < $num) {
$victim=mysql_result($result,$i,"name");
echo "<li>$victim</li>";
$i++;
}
?>