Вывести с одной таблицы с разной сортировкой - MySQL
Формулировка задачи:
Здравствуйте, передо мной возникла следующая задача, нужно вывести сами сообщения и комментарии к этим сообщениям, должен получится вывод в виде древа с одним условием, сообщения выводятся новые вверху, а комментарии к ним новые внизу.
Я все это сделал, но из за того что разная сортировка у меня два запроса, одним получаю сообщения под одной сортировкой, комментарии к ним под другой а потом их совмещаю в один массив:
Можно это дело оптимизировать?
$parent = DB::me()->query("SELECT * FROM `wall_posts` WHERE `id_user` = '$id_ank' AND `parent` = '0' ORDER BY `id` DESC")->fetchAll() ; $children = DB::me()->query("SELECT * FROM `wall_posts` WHERE `id_user` = '$id_ank' AND `parent` > '0' ORDER BY `id` ASC")->fetchAll() ; $result = array_merge($parent, $children);
Решение задачи: «Вывести с одной таблицы с разной сортировкой»
textual
Листинг программы
SELECT m.*, c.Id as cId, c.Parent as cParent, ... FROM wall_posts m LEFT JOIN wall_posts c ON m.Id = c.parent WHERE m.d_user = $id_ank AND m.parent = 0 ORDER BY m.id DESC, c.Id ASC
Объяснение кода листинга программы
В данном коде происходит следующая последовательность действий:
- Выполняется запрос SQL с помощью оператора SELECT, выбираются необходимые поля из таблицы wall_posts (включая поля из таблицы c, которые присоединены с помощью оператора LEFT JOIN).
- Устанавливается условие для выборки: в WHERE-клозе указывается, что нужно выбрать только те записи, которые принадлежат пользователю с идентификатором $id_ank и не имеют родителя (parent = 0).
- Устанавливается порядок сортировки: в ORDER BY указывается, что нужно сначала сортировать записи по убыванию идентификатора записи (m.id DESC), а затем по возрастанию идентификатора родительской записи (c.Id ASC). Список переменных и их значений:
- m.* - переменная, которая ссылается на все поля таблицы wall_posts
- c.Id as cId, c.Parent as cParent - здесь происходит выборка полей из таблицы c (используется псевдоним cId для поля c.Id и cParent для поля c.Parent)
- $id_ank - значение переменной, которое используется в условии WHERE
- 0 - значение переменной, которое также используется в условии WHERE Получается, что данный код выбирает записи из таблицы wall_posts, которые принадлежат определенному пользователю и не имеют родительской записи, а затем сортирует их по убыванию идентификатора записи и возрастанию идентификатора родительской записи.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д