我有学校的mysql数据库有15个表(15个教室),每个表都有统一的字段/简单数据,如:ID,DATE,TIME,CLASSROOM_NO,STUDENTS_ALL,STUDENTS_CURRENT,COMMENTS
方法是能够通过增加db的php格式不断更新这些数据,没关系,工作正常。
在另一个php页面中,我有display.php,它只显示我添加的最新记录,所以我可以知道对这个教室做的最新更新,这也很好,这正是我需要的,这是我的代码:
<?php
$con=mysqli_connect("localhost","classroom","mypsassword","mysqluser");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT id, date, time, classroom_no, students_all, student_current,comments FROM classroom_1 ORDER BY id DESC LIMIT 1");
while($row = mysqli_fetch_array($result))
{
echo "<b>Room:</b> " . $row['classroom_no'] . "<br>";
echo "<b>All students:</b> " . $row['students_all'] . "<br>";
echo "<b>Available students:</b> " . $row['students_current'] . "<br>";
echo "<b>Absent:</b> ";
echo floatval($row['students_all']) - floatval($row['students_current']);
echo "<br>";
echo "<b>Updated on:</b> " . $row['date'] ."<br>";
echo "<b>Update time:</b> " . $row['time']."<br>" ;
}
mysqli_close($con);
?>
现在,我在一个页面中实现和检索每个教室的最新更新没有任何问题......我所挣扎的是从每个表中选择最新记录,然后在同一页面中相应地显示它们。所以要有一个php页面说all_classrooms.php
并在一个页面中显示所有教室(仅来自每个表的最新记录更新),因此我无法理解如何在同一时间从所有表中选择sql查询并将其限制为最新记录...
我的表是这样的顺序命令: classroom_1 classroom_2 classrrom_3
请告知
答案 0 :(得分:0)
正如Kickstart建议的那样:我建议您规范化数据库设计。将所有课堂数据放入一个带有列的表中,以显示任何特定行所关联的教室。
我不会重新考虑的其他(变通方法)解决方案是create a view。看起来像是
CREATE VIEW allData AS
SELECT * from Classroom1
UNION ALL SELECT * from Classroom2
....
然后从此视图中选择select。
答案 1 :(得分:0)
最好重新设计数据库,其中一个用于教室,另一个用于课程(每个教室有许多行),等等。
但是,如果不可能,你需要这样的东西: -
SELECT classroom, id, date, time, classroom_no, students_all, student_current, comments
FROM
(
SELECT '1' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_1
UNION
SELECT '2' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_2
UNION
SELECT '3' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_3
UNION
SELECT '4' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_4
UNION
SELECT '5' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_5
UNION
SELECT '6' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_6
UNION
SELECT '7' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_7
UNION
SELECT '8' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_8
UNION
SELECT '9' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_9
UNION
SELECT '10' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_10
UNION
SELECT '11' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_11
UNION
SELECT '12' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_12
UNION
SELECT '13' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_13
UNION
SELECT '14' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_14
UNION
SELECT '15' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_15
) Sub1
INNER JOIN
(
SELECT classroom, MAX(id) AS maxid
FROM
(
SELECT '1' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_1
UNION
SELECT '2' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_2
UNION
SELECT '3' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_3
UNION
SELECT '4' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_4
UNION
SELECT '5' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_5
UNION
SELECT '6' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_6
UNION
SELECT '7' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_7
UNION
SELECT '8' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_8
UNION
SELECT '9' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_9
UNION
SELECT '10' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_10
UNION
SELECT '11' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_11
UNION
SELECT '12' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_12
UNION
SELECT '13' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_13
UNION
SELECT '14' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_14
UNION
SELECT '15' AS classroom, id, date, time, classroom_no, students_all, student_current, comments FROM classroom_15
) Sub3
GROUP BY classroom
) Sub2
ON Sub1.classroom = Sub2.classroom AND Sub1.id = Sub2.maxid
请注意,我在UNION中添加了固定的教室列。这可能会复制classroom_no的值。
还有一个名为students_all的列。这表明您有一个包含学生列表的列。如果是这样的话,最好把它拆分成另一个表,每个表可以有很多行(一个班级每个学生一个)