0

まとめたいテーブルが3つあります。すべてのユーザーのビデオを含むビデオ テーブル、すべてのユーザーの画像を含むイメージ テーブル、およびカメラ テーブル。すべての画像や動画を一覧表示して並べ替えたい

prefix_videos テーブル(videoid, userid, cameraid, videosize, datetime, deleted, videolength, videoname)

prefix_images テーブル(imageid, userid, cameraid, imagesize, datetime, deleted, imagename)

prefix_cameras テーブル(userid, cameraid, ...)

以前はビデオ テーブルしかなかったので、このクエリで必要なものが得られました。

SELECT prefix_videos.videoid, prefix_videos.videoname, prefix_videos.videosize, 
prefix_videos.videodatetime, prefix_videos.videolength, prefix_cameras.cameraname FROM 
prefix_videos INNER JOIN prefix_cameras USING (userid,cameraid) WHERE 
prefix_videos.deleted IS NULL AND prefix_videos.userid=xxx ORDER BY 
prefix_videos.datetime DESC

しかし、今は画像テーブルを追加しています。だから私が欲しいのは、次のものでテーブルを構築することです:

imageid/videoid, cameraid, imagesize/videosize, datetime (either from image or video table), videoname/imagename

画像とビデオのテーブルを組み合わせて 1 つの結果を得ているので、別の INNER JOIN がここで意味があるかどうかわかりません。

ここでのもう 1 つの重要な部分は、削除されたエントリの NULL のチェックと、画像またはビデオからのものかどうかを日付で並べ替える機能です。

4

2 に答える 2

1

ビデオと画像の 2 つの選択を別々に作成してから、それらをユニオンでまとめることができます。厄介な部分は、afaikの後でソートする必要があることです

select * from(
SELECT prefix_videos.videoid, prefix_videos.videoname, prefix_videos.videosize, 
    prefix_videos.videodatetime, prefix_videos.videolength, prefix_cameras.cameraname FROM 
    prefix_videos INNER JOIN prefix_cameras USING (userid,cameraid) WHERE 
    prefix_videos.deleted IS NULL AND prefix_videos.userid=xxx ORDER BY 
    prefix_videos.datetime DESC
    union
    SELECT prefix_images.imageid, prefix_images.imagename, prefix_images.imagesize, 
    prefix_images.imagesdatetime, prefix_images.videolength, prefix_cameras.cameraname FROM 
    prefix_images INNER JOIN prefix_cameras USING (userid,cameraid) WHERE 
    prefix_images.deleted IS NULL AND prefix_images.userid=xxx ORDER BY 
    prefix_images.datetime DESC
)a order by 'mycolumn'

また

select imageid/videoid, cameraid, imagesize/videosize, datetime (either from image or video table), videoname/imagename

from 
(select imageid as 'imageid/videoid', cameraid ,imagesize as 'imagesize/videosize', datetime, imagename as 'videoname/imagename' from prefix_images where ...
union 
select videoid as 'imageid/videoid', cameraid ,videosize as 'imagesize/videosize', datetime, videoname as 'videoname/imagename' from prefix_videos where ...
)as temptable
inner join whatever_your_table on temptable.selected_column=whatever_your_table .equivalent_column
order by 'mycolumn' 
于 2013-06-22T04:48:32.853 に答える