0

さまざまなアクションのログ情報を持つ 2 つのテーブルがあります。両方のロギング テーブルから情報を選択して表示したい。アプリケーションを変更できないため、テーブル構造を変更できません。たとえば 30 個のレコードが必要だと仮定すると、各テーブルの ID を時間順に返すだけの何らかの結合クエリを作成できると考えました。次に、個々のテーブルからそれらの ID を選択する 2 つの個別のクエリを実行するだけです。これを行う方法がわからない、またはこれを行うことができるかどうかもわかりません。私は途方に暮れています。誰でも助けることができますか?よりクリーンなソリューションがあれば、私もそれを聞いてうれしいです.私は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 に答える