我有一个学校mysql数据库,有15个表(15个教室),每个表有统一的字段/简单数据,像这样:ID, DATE, TIME, CLASSROOM_NO, STUDENTS_ALL, STUDENTS_CURRENT, COMMENTS
方法是能够一直更新这些数据通过PHP形式增加db,这很好,它工作得很好
在另一个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_classroom。PHP
并在一页中显示所有教室(仅来自每个表的最新记录更新),因此我无法理解如何同时从所有表中选择SQL查询并将其限制为最新记录…
我的表按照如下顺序排列:classroom_1classroom_2classrrom_3
请告诉
最好重新设计数据库,一个表用于教室,另一个表用于类(每个教室多行),等等。
然而,如果这是不可能的,你需要这样的东西:-
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的列。这表明您有一个包含学生列表的列。如果是这样的话,最好将其拆分为另一个表,每个类可以有许多行(每个学生一个类)
根据Kickstart的建议:我建议您规范化您的数据库设计。把所有的教室数据放到一个表中,用一列显示每一行与哪个教室相关。
我不推荐的其他(变通)解决方案是创建一个视图。这看起来像
CREATE VIEW allData AS
SELECT * from Classroom1
UNION ALL SELECT * from Classroom2
....
然后写入select from this view