php - 使用 PHPmyadmin 和 SQL 检查计划可用性的方法和算法
问题描述
更新
我正在尝试为所有学生在最后一年创建一个基本时间表,以便向 2 位主管展示他们的最终项目。我已经成功创建了一个没有限制的时间表,但现在我需要根据主管的可用性创建一个时间表。
这是问题的详细描述。
一名学生被分配一名主管,一名主管将监督一名以上的学生。主管也在白天上课。现在我需要为所有学生创建一个时间表,以向他们的主管和一名监督其他学生的额外主管展示。(目前我专注于分配给学生的主管,而不是第二个,直到我开始工作。
我想比较主管的空闲时间是否有空,然后将它们分配给插槽,然后将该时间的可用性更新为 false 以避免使用 PHP sql 查询进行重复预订。
所以...
到目前为止我做了什么:
// get all of the Slots.
$sql = "SELECT Slot_ID FROM slot WHERE StartTime < '18:00:00'";
$result = mysqli_query($con, $sql);
$DayTimeSlots = array();
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
$DayTimeSlots [] = $row;
}
}
// Store slots into simple array
function extractSlotId($DayTimeSlots){
return $DayTimeSlots['Slot_ID'];
}
$slots = array_map("extractSlotId",$DayTimeSlots);
// SHOW SLOTS
foreach ($slots as $slotID) {
echo " SlotID: = $slotID <br>";
}
// Get All students
$sql = "SELECT Student_ID FROM student WHERE PartTime =0";
$result = mysqli_query($con, $sql);
$FullTimeStudents = array();
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
$FullTimeStudents [] = $row;
}
}
// Store into a simple array
// Extract student id and Supervisor_ID
function extractStudentId($FullTimeStudents){
return $FullTimeStudents['Student_ID'];
}
$students = array_map("extractStudentId",$FullTimeStudents);
// Combine the Slot and Students array
$min = min(count($FullTimeStudents), count($DayTimeSlots));
$result = array_combine(array_slice($students , 0, $min), array_slice($slots, 0, $min));
foreach($result as $key=>$value){ // $Key = Student_ID, $value = Slot_ID
echo " $key : $value ";
// get supervisor ID
$sql = "select Supervisor_ID FROM student where Student_ID = $key";
$query = mysqli_query($con, $sql);
$row = mysqli_fetch_array($query);
$SuperID = $row['Supervisor_ID'];
echo "SuperID : $SuperID ";
// get slotID
$sql = "select Date, StartTime FROM Slot where Slot_ID = $value";
$query = mysqli_query($con, $sql);
$row = mysqli_fetch_array($query);
$Date = $row['Date'];
$StartTime = $row['StartTime'];
echo "Slot Date : $Date Start Time : $StartTime ";
// get Date id
$sql = "select Date_ID FROM dates where Date = '$Date'";
$query = mysqli_query($con, $sql);
$row = mysqli_fetch_array($query);
$DateID = $row['Date_ID'];
echo "Date ID : $DateID ";
// Check if the supervisor is available
$sql = "select `$StartTime` FROM supervisor_availability where Date_ID = $DateID AND Supervisor_ID = $SuperID";
$query = mysqli_query($con, $sql);
$row = mysqli_fetch_array($query);
$Available = $row["$StartTime"];
echo "Is the Lecture Available? : $Available ";
$Time = "`$StartTime`";
if($Available == 1){
$sql = "INSERT INTO student_slot (Student_ID, Slot_ID) VALUES ($key, $value)";
$result = mysqli_query($con, $sql);
$sql = "UPDATE `supervisor_availability` SET $Time = '0' WHERE `supervisor_availability`.`Supervisor_ID` = $SuperID AND `supervisor_availability`.`Date_ID` = $DateID" ;
$result = mysqli_query($con, $sql);
} else if ($Available == 0) {
// Not sure what to do here.
// Can i make the Slot it's currently checking go to the end of the
// array for a different student and then check the next slot and come
// back to it.
}
}
我正在使用 echo 进行调试。
如果主管可用,该算法可以正常工作,它会正确分配它,然后更新该时隙的主管可用性
如果他们不可用,只需要帮助如何处理它。
任何帮助或建议将不胜感激。
解决方案
推荐阅读
- azure - Azure 的新部署槽(预览版)流量百分比似乎很混乱
- wordpress - ReCAPTCHA v3 Google Badge 绘制在页面内容下方
- gitlab - gitlab-ci 命令未运行
- java - Java 服务器套接字:连接被拒绝
- amazon-web-services - 无 SDK 的 Amazon Transcribe Streaming API
- visual-studio - Visual Studio - 在另一台机器上构建
- python - 如何检查pyspark数据框中的字符串列是否都是数字
- javascript - jQuery关闭时无法清除弹出窗口中的文本
- node.js - 更新 node.js 会导致使用 ng e2e 'write EPIPE'
- spring-boot - 执行处理器“org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor”时出错