2009-09-01 15 views
0

私は、異なるタイプのイベントの詳細を格納するために使用される2つのテーブルを持っています。 テーブルは、日付、期間などのフィールドとほぼ同じです。私は2つのテーブルの結合を実行し、相互のフィールド '日付'でそれらを並べ替えることを試みています。SQL 2つの類似したテーブルに結合する

「タイプ」フィールドを1つのテーブルに追加して1つのテーブルに保存する方が簡単かもしれませんが、残念ながら使用しているCMSの性質上、これは許されません。

これを簡単に実行する方法はありますか?次のクエリは結果を返しません。

$sql = "SELECT * FROM Events_One a, Events_Two b WHERE a.Date > now() OR b.Date > now() ORDER BY Date ASC LIMIT ".$limit;

答えて

3

あなたはUNION声明をご覧ください。それはまさにあなたが必要とするものです。

は、1つのセットを提供します。これを後でフィルタリングしたり、並べ替えたりできます。

1

イベントタイプごとにテーブルがあり、それぞれと同じのフィールドがある場合は、デザインを再考する必要があると言います。それは正規化ルールを破っている。新しいイベントが発生するたびに別のテーブルを追加する必要があるため、設計が貧弱です。新しいタイプの値のようなデータを既存のテーブルに追加することで、新しいイベントを追加することができる方が良いでしょう。

+1

明らかに、彼の問題では、この解決策は許可されていません。 – samuil

+0

はい、残念ながら私のデザインではありません;) – Dan

0

あなたは2つの類似のテーブルを結合する場合は、すべての

組合連合や労働組合を使用することができます。その参加Command.Whenなどが選択されたすべての列が同じdatatype.Only異なる値である必要が組合を使用してが選択される。

ユニオンすべて:ユニオンがほぼ同じです。明確な操作がないため、すべての値が使用されます。

select * FROM Events_One a WHERE a.Date > now() 
union 
select * FROM Events_Two b WHERE b.Date > now() 
関連する問題