选择不同的值并按相同列(值)排序

时间:2013-03-26 15:53:52

标签: mysql select sql-order-by distinct

我试图找到一些东西来帮助我,但没有运气。

我有一个名为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排序)图像的随机图像?

提前致谢。

4 个答案:

答案 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