Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于特定列/字段的随机值获取记录-MySQL_Php_Mysql_Random - Fatal编程技术网

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语句转储到我正在尝试创建你的模式中,但我认为这不能满足你的需要。