[英]Get Records based on a Random value for a specific column/field - MySQL
I have the fillowing Query: 我有以下查询:
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
How do I get ps4_media.filename to be random, everything else is fine just want the thumbnail which ps4_media.filename is to be and of the records in the found set. 我如何获得ps4_media.filename是随机的,其他一切都很好,只是想要ps4_media.filename将是缩略图以及发现集中的记录。
You need to order the selection by RAND()
Try this:: 您需要通过
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()
This answer is based on a big-huge-loads of assumptions on your table design - since the schema or data flow hirerarch is not stated in your question. 该答案基于表设计上的大量 假设 ,因为您的问题中未提及架构或数据流hirarch。
I have taken an example to illustrate what you need to do on your query. 我以一个例子来说明您需要对查询执行的操作。 As you see this design is a smooth design, where you may have many cross references and so on.
如您所见,此设计是一种平滑的设计,其中可能有许多交叉引用,依此类推。 So I am repeating myself again to say that it's crucial you help us by showing your schema to help you.
因此,我再次重申自己的观点,即通过显示自己的模式来帮助您至关重要。
-- image belongs to a media
-- folder has many images
---- folder belongs to a media
-- gallery has many media
Table Design: 表格设计:
-- 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
Query 1: 查询1:
-- generate a random file name -生成一个随机文件名
select iname from image
order by Rand()
limit 1
;
Results 1: 结果1:
INAME
tb01
Query 2: 查询2:
-- since i have used left join -- and some images belong to the same folder -- there is a possibility of getting more than -- 1 record in the following query -由于我使用了左联接-并且某些图像属于同一文件夹-在以下查询中有可能获得超过-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)
;
Results 2: 结果2:
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
Query 3: 查询3:
-- limit the main query by 1 again -再次将主查询限制为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
;
Results 3: 结果3:
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.