我有两个表,其中包含不同操作的日志记录信息。我想从两个日志表中选择信息并显示它。我无法修改应用程序,因此无法修改表结构。假设我想要30条记录,我想我可以编写某种连接查询,它只会按时间顺序返回每个表的ID。然后,我可以简单地运行两个单独的查询,从各个表中选择这些ID。我不知道该怎么做,或者你甚至可以做到这一点,我有点不知所措。有人可以帮忙吗?如果有一个更清洁的解决方案,我也很高兴听到这个,我在PHP工作。
示例数据:
魔术选择? FROM table1 MAGIC JOIN table2 MAGICALLY ORDER BY date DESC LIMIT 3
表1
|------|-------|------------|
| id | date | other data |
|------|-------|------------|
| 1 | 8 | ... |
| 2 | 5 | ... |
| 3 | 3 | ... |
|------|-------|------------|
表2
|------|-------|------------|
| id | date | other data |
|------|-------|------------|
| 1 | 6 | ... |
| 2 | 4 | ... |
| 3 | 12 | ... |
|------|-------|------------|
输出
|-----------|-----------|
| table1_id | table2_id |
|-----------|-----------|
| NULL | 3 |
| 1 | NULL |
| NULL | 1 |
|-----------|-----------|
提前致谢。
答案 0 :(得分:3)
SELECT table1_id, table2_id
FROM
(
SELECT id AS table1_id, NULL AS table2_id, ctime AS time
FROM Table1
UNION ALL
SELECT NULL AS table1_id, id AS table2_id, date AS time
FROM Table2
) x
ORDER BY time DESC
LIMIT 3
答案 1 :(得分:1)
我想我的阅读方式与其他答案不同。听起来像你想要一个按时间排序的前30个ID的列表,而不是关心他们来自哪个表。
Select table1_id, table2_id From
(
Select ID as table1_id, NULL as table2_id, Date From Table1
UNION ALL
Select NULL as table1_id, ID as table2_id, Date From Table2
)
Order by Date DESC
Limit 30
答案 2 :(得分:0)
SELECT table1.id AS table1_id, table2.id AS table2_id
FROM table1
JOIN table2
ON table1.id = table2.id
ORDER BY table2.date DESC