«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить несколько записей и связанных с ними данных в одном запросе MySQL?

Как получить несколько записей и связанных с ними данных в одном запросе MySQL?

Опубликовано 3 ноября 2024 г.
Просматривать:562

 How to Fetch Multiple Records and Their Related Data in a Single MySQL Query?

Возврат данных нескольких ответов в одном ответе

В вашем коде PHP есть запрос, который извлекает несколько строк данных из таблицы базы данных . Однако вы получаете несколько ответов и хотите объединить их в один ответ с несколькими записями.

Чтобы добиться этого, вам необходимо изменить свой запрос, чтобы выполнить левое соединение для необходимых таблиц. Вместо получения данных об учащихся вы получите данные по предметам и включите соответствующую информацию об учащихся, используя левые соединения. Это позволит вам включать связанные данные из нескольких таблиц в один ответ.

Вот пример обновленного запроса:

$sql = 'SELECT 
                subjects.userid,
                users.name AS username,
                (
                    SELECT id 
                    FROM tbsubjects 
                    WHERE userid = subjects.userid 
                    ORDER BY id ASC 
                    LIMIT 1
                ) AS subjectsid,
                (
                    SELECT name 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        ORDER BY time DESC
                        LIMIT 1
                ) AS subjectname,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND month = DATE_FORMAT(NOW(), "%c")
                ) AS activepts,
                IFNULL(SUM(subjects.points), 0) AS totalpts,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 1
                ) AS sem1,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 2
                ) AS sem2,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 3
                ) AS sem3 
            FROM 
                tbsubjects AS subjects 
                LEFT JOIN tbusers AS users ON users.id = subjects.userid 
            WHERE subjects.userid = :userid GROUP BY subjects.userid ORDER BY subjects.time DESC';

В этом запросе:

  • Предложение FROM теперь начинается с tbsubjects AS субъектов для выборки данные субъекта.
  • Предложения LEFT JOIN используются для соединения таблицы tbsubjects с таблицей tbusers для получения соответствующего имени пользователя.
  • Подзапросы используются для вычисления subjectid, subjectname, activepts, totalpts значения , sem1, sem2 и sem3 для каждой записи предмета.

После выполнения этого запроса вы получите один ответ, содержащий несколько записей предметов, каждая из которых содержит необходимую информацию об учащихся и расчетные значения.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3