![](/img/trans.png)
[英]How to fetch the records based on the no of occurences of a value in certain field in MySQL?
[英]Get Records based on a Random value for a specific column/field - MySQL
我有以下查詢:
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將是縮略圖以及發現集中的記錄。
您需要通過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()
該答案基於表設計上的大量 假設 ,因為您的問題中未提及架構或數據流hirarch。
我以一個例子來說明您需要對查詢執行的操作。 如您所見,此設計是一種平滑的設計,其中可能有許多交叉引用,依此類推。 因此,我再次重申自己的觀點,即通過顯示自己的模式來幫助您至關重要。
-- 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.