0

私は充填クエリを持っています:

SELECT a.*,
ps4_media.filename,
ps4_galleries.name as galleryname,
ps4_media_iptc.description,
ps4_media_iptc.title,
ps4_media_iptc.headline,
ps4_media.date_added,
ps4_galleries.created,
ps4_folders.name as foldername,
ps4_galleries.gallery_count 
FROM ps4_media_galleries a 
INNER JOIN (SELECT ps4_media_galleries.gallery_id,
min(ps4_media_galleries.gmedia_id) AS minID 
FROM ps4_media_galleries GROUP BY ps4_media_galleries.gallery_id) b 
ON a.gallery_id = b.gallery_id 
AND a.gmedia_id = b.minID
INNER JOIN ps4_media ON ps4_media.media_id = a.gmedia_id 
INNER JOIN ps4_folders ON ps4_folders.folder_id = ps4_media.folder_id
INNER JOIN ps4_galleries ON ps4_galleries.gallery_id = a.gallery_id
INNER JOIN ps4_media_iptc ON ps4_media_iptc.media_id = a.gmedia_id
ORDER BY ps4_galleries.created DESC

ps4_media.filename をランダムに取得するにはどうすればよいですか。それ以外はすべて問題なく、ps4_media.filename のサムネイルと対象セット内のレコードが必要です。

4

2 に答える 2

0

この回答は、テーブル設計に関する膨大な量仮定に基づいています-スキーマまたはデータフローの雇用主が質問に記載されていないためです。

クエリで何をする必要があるかを説明するために例を挙げました。ご覧のとおり、このデザインはスムーズなデザインであり、多くの相互参照などがある場合があります。繰り返しになりますが、スキーマを示して助けていただくことが非常に重要です。

-- image belongs to a media 
-- folder has many images
---- folder belongs to a media
-- gallery has many media

テーブルのデザイン:

-- Gallery Table
GID     GNAME       GLOCATION
1       art         cambridge
2       art         torronto
3       picture     melbourne
4       sculpture   paris

-- Media Table
MID     MNAME   MGID
10      screen  1
15      brail   2
20      embose  1
25      print   3
30      print   4
35      embose  2

-- Folder Table
FID     FNAME       FMID
200     fprojToro1  15
201     fprojMelb1  25
202     fprojCamb1  20
203     fprojCamb2  20
204     fprojToro2  15
205     fprojToro3  35
206     fprojMelb2  25
207     fprojMelb3  25

-- Image Table
IID     INAME   IFID
1001    tb01    200
1002    mp02    201
1005    te05    205
1008    te08    205
1010    mp10    206
1015    mp15    207
1018    te18    205

クエリ 1:

-- ランダムなファイル名を生成します

select iname from image
order by Rand()
limit 1
;

結果 1:

INAME
tb01

クエリ 2:

-- 左結合を使用しているため -- いくつかの画像は同じフォルダーに属しています -- 次のクエリで 1 レコード以上を取得する可能性があります

select g.*, m.mname, f.fname, i.iname
from gallery g
left join media m
on m.mgid = g.gid
left join folder f
on f.fmid = m.mid
left join image i
on i.ifid = f.fid
where i.iname = (select iname from image
                 order by Rand()
                 limit 1)
;

結果 2:

GID     GNAME   GLOCATION   MNAME   FNAME        INAME
3       picture     melbourne   print   fprojMelb2  mp10

クエリ 3:

-- メインクエリを再度 1 で制限します

select g.*, m.mname, f.fname, i.iname
from gallery g
left join media m
on m.mgid = g.gid
left join folder f
on f.fmid = m.mid
left join image i
on i.ifid = f.fid
where i.iname = (select iname from image
                 order by Rand()
                 limit 1)
limit 1
;

結果 3:

GID     GNAME   GLOCATION   MNAME   FNAME       INAME
2       art     torronto    embose  fprojToro3  te18
于 2012-12-05T10:28:54.600 に答える
0

これをRAND() 試してください::

SELECT a.*,
ps4_media.filename,
ps4_galleries.name as galleryname,
ps4_media_iptc.description,
ps4_media_iptc.title,
ps4_media_iptc.headline,
ps4_media.date_added,
ps4_galleries.created,
ps4_folders.name as foldername,
ps4_galleries.gallery_count FROM ps4_media_galleries a INNER JOIN (SELECT ps4_media_galleries.gallery_id,
min(ps4_media_galleries.gmedia_id) AS minID FROM ps4_media_galleries GROUP BY ps4_media_galleries.gallery_id) b ON a.gallery_id = b.gallery_id AND a.gmedia_id = b.minID
INNER JOIN ps4_media ON ps4_media.media_id = a.gmedia_id INNER JOIN ps4_folders ON ps4_folders.folder_id = ps4_media.folder_id
INNER JOIN ps4_galleries ON ps4_galleries.gallery_id = a.gallery_id
INNER JOIN ps4_media_iptc ON ps4_media_iptc.media_id = a.gmedia_id
ORDER BY RAND()
于 2012-12-05T05:01:39.607 に答える