Php 基于特定列/字段的随机值获取记录-MySQL
我有以下问题:Php 基于特定列/字段的随机值获取记录-MySQL,php,mysql,random,Php,Mysql,Random,我有以下问题: 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_c
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()
这个答案基于表设计中大量的假设,因为您的问题中没有说明模式或数据流hirerarch
我举了一个例子来说明您需要对查询做什么。正如您所见,此设计是一个平滑的设计,您可能会有许多交叉引用等。因此,我再次重申,通过展示您的模式来帮助您,这对帮助我们非常重要。
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
查询1:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
--生成一个随机文件名
select iname from image
order by Rand()
limit 1
;
结果1:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
查询2:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
--因为我用左键连接
--有些图像属于同一文件夹
--有可能得到超过
--以下查询中有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:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
查询3:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
--再次将主查询限制为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:
-- 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
INAME
tb01
GID GNAME GLOCATION MNAME FNAME INAME
3 picture melbourne print fprojMelb2 mp10
GID GNAME GLOCATION MNAME FNAME INAME
2 art torronto embose fprojToro3 te18
顺序是正确的,并且必须保持原样,查询中的order BY RAND()在该点随机分配整个结果,我只希望ps4_media.filename随机分配。用一个示例向我们展示当前查询的结果和预期结果。很抱歉,我没有遵循。结果显示了30条最新的记录,或者在我们的例子中是添加到网站的图库,每个图库都有一个图库中某个图像的缩略图,我希望每次有人访问该网站时,该缩略图都会有所不同。然后,您只需在`ps4_media.filename`上选择
ORDER BY RAND()
然后将此作为查询其他所有内容的条件:-)好的,那很好,我该怎么做?我希望我能将查询发布给你。但是我在手机上。所以我会给你一些步骤,然后你可以试试。我稍后会发布答案。选择一个随机的ps4_media.filename。使用该文件名的id连接其他表以提取数据。这就像你先选择了你想要的文件,然后根据该文件取出其余的数据。你能用你的表模式更新问题吗,或者只是将create/sample insert语句转储到我正在尝试创建你的模式中,但我认为这不能满足你的需要。