#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. Имена полей не имеют значения в ОБЪЕДИНЕНИЯХ. Вам нужно одинаковое количество столбцов с соответствующими типами данных.