3

我试图找到一些东西来帮助我解决这个问题,但没有运气。

我有一列“slide_no”,值为 1-4。我想通过 slide_no 从数据库中选择具有不同 slide_no 顺序的所有内容,但显示随机选择的图像。

数据库表

幻灯片 ID | 幻灯片名称 | 幻灯片编号 | 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 订购)图像的随机图像?

提前致谢。

4

4 回答 4

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
于 2013-03-26T16:01:46.873 回答
2

如果您每次只寻找一个随机 ID,您可以尝试这样的事情。

SELECT slide_id
FROM {table_name} 
ORDER BY RAND()
LIMIT 1;
于 2013-03-26T15:58:19.703 回答
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
于 2013-03-26T15:57:59.183 回答
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 中生成随机数。

于 2013-03-26T16:02:42.497 回答