объединение 2 таблиц в MySQL оператор выбора - PullRequest
2 голосов
/ 28 мая 2011

Я знаю, что могу делать объединения, но это не совсем то, что я хочу.

Я делаю живую систему чата, которая состоит в основном из 2 таблиц: основной таблицы чата (назовите ее таблицей a), а затеммод таблицы (назовите это одна таблица б).Если пользователь приостанавливается, количество сообщений превышает 100 для этого канала или оно превышает 1 неделю, сообщения перемещаются из основной таблицы чата в таблицу модов.

Я сохраняю идентификатор сообщений чата какID (основной) в основной таблице чата и как chatID в таблице модов.

Я делаю отдельную страницу для моих модов, и я хочу иметь возможность объединить две таблицы в одну областьно я хочу, чтобы они были упорядочены по соответствующим таблицам.

Итак, допустим, у нас было следующее:

Идентификаторы основной таблицы: 1,2,4 Идентификатор таблицы модификации: 3

Я хочу, чтобы мои результаты отображались в 1,2,3,4, независимо от того, в какой таблице находится ID.

Любая помощь очень ценится!

Редактировать: Я получил ответ, и вот что я делал так:

SELECT ab.* FROM 
  ((SELECT ID as table_id FROM a 
    WHERE roomID = 'newUsers' ORDER BY ID ASC) 
UNION ALL 
  (SELECT chatID as table_id FROM b 
    WHERE roomID = 'newUsers' ORDER BY chatID ASC)) ab 
ORDER BY ab.table_id 

1 Ответ

5 голосов
/ 28 мая 2011

Используйте UNION в подвыборке.

SELECT ab.* FROM (
  SELECT 1 as table_id, * FROM a
UNION ALL
  SELECT 2 as table_id, * FROM b
) ab
ORDER BY ab.id

Если вы хотите, чтобы результат таблицы A отображался перед таблицей B, измените запрос на:

SELECT ab.* FROM (
  SELECT 1 as table_id, * FROM a
UNION ALL
  SELECT 2 as table_id, * FROM b
) ab
ORDER BY ab.table_id, ab.id

Некоторый фон
UNION ALL объединит две таблицы наборов результатов в один набор результатов.
UNION сделает то же самое, но удалит дублирующиеся строки.
Это требует времени и замедляет работу, поэтому, если вы знаете, что дублирующихся записей не будет (или вас не волнует сбой) используйте UNION ALL.

См. Также: http://dev.mysql.com/doc/refman/5.5/en/union.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...