MySQL には異なるスキーマを持ついくつかの異なるテーブルがありますが、すべてのテーブルには自動インクリメントされた ID とタイムスタンプがあります (より正確には、列名は datetime 型の「create_timestamp」です)。
この質問にさらに詳しい説明を加えるために、私はソーシャル データ アグリゲーターを構築しており、MySQL DB はソーシャル メディア API からキャッシュされたデータにすぎません。したがって、テーブルは Instagram、Youtube ビデオ、ツイートなど用です。私の目標は、create_time に基づいて、これらのそれぞれの組み合わせから合計 20 レコードをクエリすることです。各メディア API は異なるデータを返すため、各テーブルのスキーマは大きく異なります。
擬似コードでは、これを達成しようとしています:
SELECT * FROM instagrams, tweets, youtube_videos, tumblr_posts ORDER BY create_time DESC LIMIT 20;
すべての ID とテーブルの種類を照会し、PHP でこれらをループして個々のデータを取得する必要があるかもしれないことに気付きました。たとえば、より多くの疑似コード:
MySQL
SELECT id, table_name FROM instagrams, tweets, youtube_videos, tumblr_posts ORDER BY create_time DESC LIMIT 20;
PHP
-For each result from that query as $row, query for:
SELECT * FROM $row["table_name"] WHERE id=$row["id"]
このデータを PHP アプリに取り込むための最良かつ最も効率的な方法は何ですか?
更新:
ダンに感謝します。UNION を使用して、ID とテーブル名を選択するために思いつきました。
SELECT id, create_timestamp, "instagrams" as "table_name" FROM instagrams
UNION
SELECT id, create_timestamp, "tumblr_posts" as "table_name" FROM tumblr_posts
UNION
SELECT id, create_timestamp, "wordpress_posts" as "table_name" FROM wordpress_posts
UNION
SELECT id, create_timestamp, "tweets" as "table_name" FROM tweets
UNION
SELECT id, create_timestamp, "youtube_videos" as "table_name" FROM youtube_videos
UNION
SELECT id, create_timestamp, "manual_photo" as "table_name" FROM manual_photo
ORDER BY create_timestamp DESC
LIMIT 20
次に、PHP でループして、個々のレコードを一度に 1 つずつクエリします。