php - PHP以正确的顺序从五个不同的表中检索信息
问题描述
我开发了一个聊天系统,学生和教职员工可以在其中交换不同的信息。我开发了一个数据库,其中有五个表:staff 表、student、message 和两个映射表 Staff_message 和 stu_message。这些表仅包含学生/员工 ID 和消息 ID。
我的问题是我无法订购消息。我的意思是我无法弄清楚如何创建一个返回所有消息并按例如 ID 排序的 SQL 语句。我所做的代码是这样的:
$qu = mysqli_query($con,"SELECT * FROM stu_message");
while($row7 = mysqli_fetch_assoc($qu)){
$que = mysqli_query($con, "SELECT * FROM student WHERE studentid =".$row7['stu_id']);
while($row8 = mysqli_fetch_assoc($que)) {
$username = $row8['username'];
}
$query3 = mysqli_query($con, "SELECT * FROM message WHERE id=".$row7['mid']);
while($row6 = mysqli_fetch_assoc($query3)) {
echo $row6['date']."<strong> ".$username."</strong> ".$row6['text']."<br>";
}
}
$query2 = mysqli_query($con, "SELECT * FROM staff_message");
while($row3 = mysqli_fetch_assoc($query2)){
$query = mysqli_query($con, "SELECT * FROM staff WHERE id =".$row3['staff_id']);
while($row5 = mysqli_fetch_assoc($query)) {
$username = $row5['username'];
}
$query3 = mysqli_query($con, "SELECT * FROM message WHERE id=".$row3['m_id']);
while($row6 = mysqli_fetch_assoc($query3)) {
echo $row6['date']."<strong> ".$username."</strong> ".$row6['text']."<br>";
}
}
?>
结果和我想要的不一样。更具体地说,首先显示来自学生的信息,然后是来自工作人员的信息。我的问题是,是否有任何查询可以基本上将所有这四个表合二为一,并且所有消息都将以正确的顺序显示?例如通过身份证?先感谢您!
解决方案
首先,用于获取与orJOIN
对应的用户名,以及消息的文本,而不是单独查询。stu_id
staff_id
然后使用UNION
将两个查询组合成一个查询,然后您可以使用ORDER BY
.
SELECT u.id, u.text, u.username
FROM (
SELECT s.username, m.text, m.id
FROM message AS m
JOIN stu_message AS sm ON m.id = sm.mid
JOIN student AS s ON s.id = sm.stu_id
UNION ALL
SELECT s.username, m.text, m.id
FROM message AS m
JOIN staff_message AS sm ON m.id = sm.m_id
JOIN staff AS s ON s.id = sm.staff_id
) AS u
ORDER BY u.id
推荐阅读
- c++ - C ++文件可配置的编译时多态模式?
- docker - 请等待....对于第一个基于 docker 的詹金斯引导
- android - 在多个设备上进行 Android 测试分片
- scala - 在 Scala 中安静地关闭多个资源的更清洁方法
- javascript - 如何修复 gulp 任务 - css 任务不停地工作?
- javascript - 从 laravel api 中的 react-native 应用程序调整 base64 图像的大小?
- forms - 单页应用程序(Vue)中的支付
- javascript - 在饼图的工具提示中显示数据
- c# - 从 byte[] 下载 PDF 文件
- c# - 访问 Saml2 控制器时找不到资源