我的数据库中有两个表: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
用于合并两个表(一个表中的少数缺失字段,我将标记为空),但是,我不知道如何对它们进行排序。我目前看到的唯一出路是使用两个不同的查询ORDER BY promoted DESC, date ASC
,将结果放在两个数组中,然后将它们与 PHP 交替合并。
编辑:似乎我没有很好地解释我的目标,因为当前的两个答案并不能完全解决我的问题。
建议的查询首先给我一个类别的所有提升事件,然后是另一种类型的所有提升事件,一种类型的正常事件,最后是另一种类型的剩余事件。但是,这些也需要交替:一位用户提升,一位管理员提升,一位用户提升,一位管理员提升....当我用完管理员提升事件时,我想要一个管理员事件,一个用户事件,一个管理员事件...