0

私は主にニュース、アルバム、ビデオと呼ばれる3つの主要なテーブルを持っています。3つのテーブルすべてからのすべての更新が投稿された時間の降順で並べ替えられて表示されるFacebookの壁のようなページを作成したいと思います。

dbへの単一のクエリでこの種の呼び出しを行うことは可能ですか?

私のテーブルについて簡単に説明します

ニュースにはid、title、content、timestamp
アルバムにはid、title、albumdirectory、timestamp
ビデオにはid、title、youtubelink、timestampがあります。

不可能な場合、それを行うための最良の方法は何でしょうか。

4

3 に答える 3

1

それはそのデータがどのように設計されているかに依存します。共有IDを使用してすべてが関連している場合は、単一の結合クエリを作成してすべてのデータを取得できます。そのデータが関連していない場合は、3つの別々の呼び出しを行う必要があります。

于 2012-04-12T05:43:43.373 に答える
1

この目的のために3つのテーブルすべてを同時にクエリすることは、良い習慣ではありませんフィードテーブルを作成できます。必要な他のすべてのテーブル(ニュース、アルバム、ビデオ)から、そのフィールドの日付を含む参照IDを挿入します。これで、フィードテーブルをクエリし、そのテーブルの参照IDに基づいて他の3つのテーブルに結合し、フィードテーブルの日付に従ってそれらを表示できます。私はこのアプローチを使用しており、これは私にとってうまく機能しています。

お役に立てれば。

于 2012-04-12T06:36:17.593 に答える
0

各エンティティに必要な情報が同じ構造(つまり、ID、タイトル、タイムスタンプ)を共有している場合は、UNIONを使用してこれを行うことができます

SELECT * FROM (
    SELECT CONCAT('news','-',id),title,`timestamp`
    FROM news
    UNION
    SELECT CONCAT('albums','-',id),title,`timestamp`
    FROM albums
    UNION
    SELECT CONCAT('videos','-',id),title,`timestamp`
    FROM videos
) AS all_items
ORDER BY `timestamp`

idフィールドが(各テーブル内だけでなく)データベース全体で一意である場合は、CONCATを削除して、IDを返すことができます。

于 2012-04-12T06:37:28.320 に答える