我试图找到一些东西来帮助我,但没有运气。
我有一个名为1-4的“slide_no”列。 我想通过slide_no从数据库中选择不同的slide_no顺序,但是显示随机选择的图像。
数据库表
slide_id | slide_name | slide_no | fk_project_id 1 | pic1.jpg | 1 | 2 2 | pic2.jpg | 3 | 4 3 | pic3.jpg | 2 | 3 4 | pic4.jpg | 4 | 1 5 | pic5.jpg | 2 | 6 6 | pic6.jpg | 3 | 5
正如您所看到的,slide_no不必是唯一的,我希望它能够在每个页面加载时显示随机图像。到目前为止,我只能生成一个可以获得前4张图像的查询。
是否可以通过slide_no订购并获取具有不同(仍由slide_no排序)图像的随机图像?
提前致谢。
答案 0 :(得分:4)
MySQL为此提供了ORDER BY RAND()
。
ORDER BY RAND()
与LIMIT
相结合对于从一组行中选择随机样本非常有用。
查询将是:
SELECT *
FROM ( SELECT *
FROM `tblName`
GROUP BY slide_no
ORDER BY RAND()
) `tempTable`
ORDER BY slide_no ASC
答案 1 :(得分:2)
如果您每次只查找一个随机ID,就可以尝试这样的事情。
SELECT slide_id
FROM {table_name}
ORDER BY RAND()
LIMIT 1;
答案 2 :(得分:1)
工作示例:
http://www.sqlfiddle.com/#!2/0664c/8
Select slide_name, slide_no From
(SELECT *
FROM ( SELECT *
FROM tableName
GROUP BY slide_no, slide_name
ORDER BY RAND()
) `tempTable`
) x
Group by slide_no
ORDER BY slide_no ASC
limit 4
答案 3 :(得分:0)
SELECT slide_no
, ( SELECT TOP 1 slide_name
FROM #tmp T2
WHERE T2.slide_no = T1.slide_no
ORDER BY RAND() --You can place other logic to "randomize" here in the future
)
FROM #tmp T1
GROUP BY slide_no;
我不确定这是否能满足您的需求。问题是具有相同种子值的RAND()的重复调用返回相同的结果。如果你想让它真正随机,这本身就是另一个问题。有关在SQL中生成随机数的信息,请参阅here。