1

構造はかなり似ていますが、別々のテーブルとして使用したかったので十分に異なる5つのテーブルがあります。基本的に、テーブルは、いくつかの共通フィールドといくつかの他の一意のフィールドを持つ5つの異なる「カテゴリ」でイベントを記録します。

5つのテーブルすべてのレコードが、レコード作成タイムスタンプの降順で表示されるレポートを作成する必要があるようです(すべてのテーブルで標準)。すべてのテーブルには、fName、lName、scorePercent、numCorrectなどの必要な共通フィールドがあります。

5つのテーブルすべてからレコードを選択し、レコードの元のテーブルと共通フィールドの値を降順で表示する列を含む1つのテーブルにそれらを表示するクエリを作成するための最良の方法を理解できないようです。日付時刻。

これを行う簡単な方法はありますか?PHPでそれを行う必要がありますか?オリジナルのデザインに疑問を持ち始めています。

ありがとう。

4

2 に答える 2

2

データが一緒にクエリできるほど類似している場合、タイプを記録するための追加の列を持つ1 つのテーブルに一緒に格納できるほど類似している可能性がありますが...

select * from (
    select 'table1', timestamp_col, fName, lName, scorePercent, numCorrect
    from table1 where ...
    UNION ALL
    select 'table2', timestamp_col, fName, lName, scorePercent, numCorrect
    from table2 where ...
    UNION ALL
    select 'table3', timestamp_col, fName, lName, scorePercent, numCorrect
    from table3 where ...
    UNION ALL
    select 'table4', timestamp_col, fName, lName, scorePercent, numCorrect
    from table4 where ...
    UNION ALL
    select 'table5', timestamp_col, fName, lName, scorePercent, numCorrect
    from table5 where ..
) x
order by timestamp_col desc

内部クエリの外側で単一の where ステートメントを使用することもできますが、すべてのテーブルのすべての行が結合されるため、パフォーマンスが低下します。このようにして、実際に必要な行だけが結合されます。

は並べ替えられないためUNION ALL、 よりも優れた選択であることに注意してください(データは2 回並べ替えられます。1 回目は重複を削除するため、もう 1 回は並べ替えのためです)。UNIONUNION ALLUNION

于 2012-04-06T14:20:55.333 に答える
0

UNION ALLステートメントを使用できます。だから多分このようなもの:

SELECT
  fName, lName, scorePercent, numCorrect,date, 1 AS type
FROM
  table1
UNION ALL
SELECT
  fName, lName, scorePercent, numCorrect,date, 2 AS type
FROM
  table2
UNION ALL
SELECT
  fName, lName, scorePercent, numCorrect,date, 3 AS type
FROM
  table3
UNION ALL
SELECT
  fName, lName, scorePercent, numCorrect,date, 4 AS type
FROM
  table4
UNION ALL
SELECT
  fName, lName, scorePercent, numCorrect,date, 5 AS type
FROM
  table5
ORDER BY date
于 2012-04-06T14:17:25.407 に答える