2013-03-26 83 views
3

我试图找到一些东西来帮助我,但没有运气。选择不同的值,并在同一列(值)排序

我有一列值为1-4的“slide_no”。 我想从数据库中选择不同的slide_no order by 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

你是什么意思的“随机幻灯片图像” – 2013-03-26 15:56:38

+0

我相信op想要的图像随机图像slide_no = 1,图像随机图像其中slide_no = 2,图像随机图像其中slide_no = 3 ,并从slide_no = 4的图像随机图像。 – jswolf19 2013-03-26 16:00:34

+0

是的,从slide_no = 1等图像的随机图像:) – Niantic 2013-03-27 13:45:18

回答

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 
+0

这几乎让我的一天!图片确实发生了变化,但不幸的是它仍保持着相同的图片。 有没有可能改变这个,所以它选择一个随机图像,但'slide_n'命令? – Niantic 2013-03-27 13:58:26

+0

@Niantic是的,尝试最新的更新。 – 2013-03-27 15:28:19

+0

它看起来像是在工作一分钟,但它会选择所有图像并全部放出。即使其中只有4个显示,您可以在源代码中看到全部6个。我尝试了一个限制4,但它然后再次选择4个随机,它可以有1,2,2,3(示例) - 失踪slide_no = 4和有额外slide_no = 2。尝试了一个独特的slide_no之前,但这导致了一个错误。 – Niantic 2013-03-27 17:00:27

2

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

SELECT slide_id 
FROM {table_name} 
ORDER BY RAND() 
LIMIT 1; 
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

我尝试了ORDER BY RAND(),但它混淆了它的顺序。我需要的是由slide_no(asc)排序的随机图片。 – Niantic 2013-03-27 13:49:19

+0

@Niantic检查编辑。 – hjpotter92 2013-03-27 14:03:21

+0

现在我可能看起来很无知,但是'tempTable'是什么? – Niantic 2013-03-27 14:07:42

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()将返回相同的结果。如果你想让它成为真正的随机,这本身就是另一个问题。请参阅here用于在SQL中生成随机数。

+0

很确定问题有MySQL标记。 – hjpotter92 2013-03-26 16:04:27