PHP Получить информацию из пяти разных таблиц в правильном порядке - PullRequest
0 голосов
/ 17 сентября 2018

Я разрабатываю систему чата, где студенты и сотрудники могут обмениваться различными сообщениями.Я разработал базу данных, в которой у нас есть пять таблиц: таблица персонала, студент, сообщение и две таблицы сопоставления staff_message и stu_message.Эти таблицы содержат только идентификатор студента / персонала и идентификатор сообщения.

Моя проблема в том, что я не могу заказать сообщения.Я имею в виду, что я не могу понять, как я могу сделать один оператор 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>";             
    }   
}
?>  

Результат отличается от того, что я хочу.Чтобы быть более конкретным, сначала показывают сообщения от студентов, а затем от сотрудников.У меня вопрос, есть ли какой-нибудь запрос, который может объединить в основном все эти четыре таблицы в одну, и все сообщения будут показаны в правильном порядке?например по идентификатору?Заранее спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Сначала используйте JOIN, чтобы получить имя пользователя, соответствующее 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...