Объединение и сортировка результатов двух разных SQL-запросов

#php #mysql #sql

#php #mysql #sql

Вопрос:

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

Теперь, когда мне нужно распечатать эти комментарии, я хочу, чтобы они были в одном списке, упорядоченном по их значению created_at . Итак, мне нужно выполнить два разных запроса (первый также соединяется с пользовательской таблицей, чтобы найти имена пользователей и т.д.), А затем объединить результаты.

Я думал, что мог бы сделать ОБЪЕДИНЕНИЕ, но это не сработает, когда таблицы имеют разные поля. Я мог бы сделать это в своей логике приложения, объединив два результирующих массива, но это кажется беспорядочным, если есть более приятное решение, которое можно выполнить непосредственно в базе данных.

Ответ №1:

Вы все равно можете использовать a UNION при выравнивании обеих таблиц, указав поля в SELECT части.

Пример:

Table1(id,comment,enterdate,userid)

Table2(id,comment,enterdate)

 SELECT id, comment, enterdate, userid, 'Logged In' as Type FROM Table1
UNION
SELECT id, comment, enterdate, NULL, 'Guest' FROM Table2
  

Затем UNION их можно упорядочить по мере необходимости.

Ответ №2:

предложенное вами решение ОБЪЕДИНЕНИЯ может быть использовано, если вы назовете, например, идентификатор пользователя первой таблицы и имя из второй таблицы как ex. Идентификация

Выберите идентификатор пользователя в качестве идентификатора, created_at в качестве даты из ОБЪЕДИНЕНИЯ loggedUsers Выберите имя в качестве идентификатора, created_at в качестве даты из guestUsers

надеюсь, это помогло…

Комментарии:

1. Имена полей не имеют значения в ОБЪЕДИНЕНИЯХ. Вам нужно одинаковое количество столбцов с соответствующими типами данных.