简体   繁体   English

根据特定列/字段的随机值获取记录-MySQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM