20

3つの別々のテーブルのデータを使用するRSSフィードをPHPで作成しています。表はすべて、サイトのさまざまな領域内のページを参照しています。私が抱えている問題は、XML内にリンクフィールドを作成しようとしていることです。各レコードがどのテーブルからのものであるかを知らなければ、そのテーブルへの正しいリンクを作成することはできません。

この問題を解決する方法はありますか?mysql_fetch_fieldを使用しようとしましたが、テーブルに空白の値が返されました。

SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3

他にも関連するフィールドがありますが、これは基本的に私が使用しているクエリです。

4

4 に答える 4

33

次のように、列リストに定数を追加するだけです。

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3

これはあなたに次のようなものを与えるでしょう:

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation

等々。

これにより、リンクへの変換を容易にする可能性のある文字列データ型を使用でき(特に、検索または変換するのではなく、ページにコピーする必要がある値を使用する場合)、as句を使用すると、それを参照できます。他の列と同じように(名前で)。

-の使用に注意してunion allください。テーブルから重複する行がないことが確実な場合(それぞれに異なる値があり、タイトルが一意であると想定しているため、この場合はおそらく当てはまります)、回避できます。無駄な並べ替えと削除の重複操作。単独で使用すると、不要な作業が発生する場合があります。table_nameunion allunion

重複した削除を実行する場合は、を使用するように戻しunionます。

于 2009-09-10T12:15:44.553 に答える
16

簡単なはずですが、次のようにしてください。

SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3
于 2009-09-10T12:09:00.560 に答える
1

上記のクエリは行を2回レンダリングしないため、以下のクエリの方がうまく機能し、より良いアイデアが得られます。

SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN 
t1
ON t1.id=t2.id
WHERE t1.id=null

上記のスクリプトは重複するデータ行を提供せず、

  1. ソースt1テーブルとしてのt1とt2の間のすべての共通データ。
  2. 非t2行はt1テーブルとしてソースされます。
  3. 非t1行はt2テーブルとしてソースされます。

t2テーブルの共通データが必要な場合は、左結合を反転します

于 2018-11-13T18:34:07.437 に答える
0

一定の値を持つダミー列を追加します。例えば。句ごとに「source_table、title from funky_table」として「funky_table」を選択しますが、引用符の名前は異なります。

于 2011-01-11T16:09:23.900 に答える