0

2 つの MySQL テーブルがあり、どちらもタイムスタンプ (DATE/TIME) を使用しています...それらを組み合わせて、タイムスタンプ (2013-08-21 13:13:47) で並べ替えるクエリが必要です。

Table 1
---------------------------------------
Timestamp |  Col 1  |  Col 2  | Col 3  


Table 2
---------------------------------------
Timestamp |  Col 1  |  Col 2  | Col 3  | Col 4

印刷したい

PRINT OUT (in order by timestamp)
----------------
Timestamp  |  Col 1  |  Col 2  | Col 3  | Col 4
Timestamp  |  Col 1  |  Col 2  | Col 3
Timestamp  |  Col 1  |  Col 2  | Col 3
Timestamp  |  Col 1  |  Col 2  | Col 3  | Col 4
Timestamp  |  Col 1  |  Col 2  | Col 3
Timestamp  |  Col 1  |  Col 2  | Col 3  | Col 4
Timestamp  |  Col 1  |  Col 2  | Col 3 
Timestamp  |  Col 1  |  Col 2  | Col 3  | Col 4
Timestamp  |  Col 1  |  Col 2  | Col 3  | Col 4

これを行う最も簡単な方法は何ですか? 2 つのテーブルを配列に入れて並べ替える必要がありますか? または、SQLクエリでこれを行う必要がありますか?

私はPHPとMySQLを使用しています...

4

3 に答える 3

2

Table1.Col1 に Table2.Col1 と同じ種類のデータがあり、Table1.Col2 に Table2.Col2 と同じ種類のデータがある、などと仮定すると、これがおそらく最も簡単な方法です。ユニオン内のテーブルは、同じ数の列を持つ必要があります。Col4 の代わりに NULL を使用します。ORDER BY 句に追加の列が必要になる場合があります。

select T1.Timestamp, T1.Col1, T1.Col2, T1.Col3, NULL as Col4
from Table1
union all
select T2.Timestamp, T2.Col1, T2.Col2, T2.Col3, T2.Col4
from Table2
order by Timestamp

似たような名前の列に同じ種類のデータがある場合にのみ、これを行うのが理にかなっています。Table1.Col1 に名前が含まれ、Table2.Col1 に電話番号が含まれている場合、これを行う意味はあまりありません。

于 2013-08-21T21:24:34.893 に答える
0

これを行うには、MySQL ユニオンを使用します。このようなクエリはそれを行います:

(
  SELECT
    id,
    NULL AS col,
    time
  FROM
    table1
)
UNION
(
  SELECT
    id,
    col,
    time
  FROM
    table2
)
ORDER BY time

そうすれば、結果セットにはすべて同じ列が含まれますが、PHP を使用して 2 つのクエリで実行した場合と同様に、インデックスが存在せず、処理が遅くなる可能性があります。

SQLFiddle は次のとおりです。 http://sqlfiddle.com/#!2/f7416/10

于 2013-08-21T21:27:13.823 に答える