0

我有两个表,其中包含不同操作的日志信息。我想从两个记录表中选择信息并显示它。我无法修改应用程序,因此无法修改表结构。假设我想要 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         |
|-----------|-----------|

提前致谢。

4

3 回答 3

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

SQL 小提琴示例

于 2012-11-06T16:49:00.620 回答
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
于 2012-11-06T17:39:37.863 回答
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
于 2012-11-06T16:49:59.887 回答