У меня две таблицы в моей базе данных: events_users
и events_admins
. Они почти идентичны (за исключением нескольких полей). Обе таблицы также имеют promoted
поле (1 или 0).
+-----------------+-----------------------+-------------------+-------------------+ | events_users_id | events_users_promoted | events_users_name | events_users_date | +-----------------+-----------------------+-------------------+-------------------+ | 1 | 0 | Users foo | 2012-11-15 | | 2 | 1 | Users bar | 2012-11-15 | | 3 | 0 | Users foobar | 2012-11-14 | +-----------------+-----------------------+-------------------+-------------------+ +------------------+------------------------+--------------------+--------------------+ | events_admins_id | events_admins_promoted | events_admins_name | events_admins_date | +------------------+------------------------+--------------------+--------------------+ | 1 | 0 | admins foo | 2012-11-14 | | 2 | 0 | admins bar | 2012-11-15 | | 3 | 1 | admins foobar | 2012-11-16 | +------------------+------------------------+--------------------+--------------------+
Я не могу поместить оба типа событий в одну таблицу по разным причинам. Однако я хочу получить один результат:
Все события упорядочиваются по дате, в первую очередь, сначала, но сначала происходит событие администратора и всегда чередуется с пользовательским событием (чередуя каждую запись). Сначала отображаются продвигаемые события пользователя и администратора.
+------------------+-----------------------+-------------------+-------------------+ | a 3 | 1 | admins foobar | 2012-11-16 | | u 2 | 1 | Users bar | 2012-11-15 | | a 1 | 0 | admins foo | 2012-11-14 | | u 3 | 0 | Users foobar | 2012-11-14 | | a 2 | 0 | admins bar | 2012-11-15 | | u 1 | 0 | Users foo | 2012-11-15 | +------------------+-----------------------+-------------------+-------------------+
Мне было интересно, могу ли я сделать это с помощью одного запроса, используя UNION
для объединения двух таблиц (несколько отсутствующих полей в одной таблице, я буду отмечать как null), однако я не знаю, как их сортировать. Единственный выход, который я вижу на данный момент, – это использование двух разных запросов с простым ORDER BY promoted DESC, date ASC
, помещением результатов в два массива и их слиянием с PHP.
EDIT : Кажется, я не очень хорошо объяснил свою цель, поскольку два текущих ответа не совсем решают мою проблему.
Предлагаемые запросы сначала дают мне все продвинутые события из одной категории, затем все продвигаемые события другого типа, обычные события одного типа и, наконец, остальные события другого типа. Тем не менее, они также должны чередоваться: один пользователь продвигается, один администратор продвигается, один пользователь продвигается, один администратор продвигается …. Когда у меня закончились события, связанные с администрированием, мне нужно одно событие администратора, одно пользовательское событие, одно событие администратора …