我想使用ORDER BY RAND()
查询mysql。但我有一些问题要问。
我的mysql表'image'如:
id | image | width | height |
1 | 1.jpg | 640 | 480 |
2 | 2.jpg | 800 | 600 |
3 | 3.jpg | 480 | 600 |
4 | 4.jpg | 720 | 480 |
5 | 5.jpg | 600 | 800 |
6 | 6.jpg | 1024 | 768 |
7 | 7.jpg | 768 | 1024 |
8 | 8.jpg | 800 | 600 |
9 | 9.jpg | 720 | 560 |
10 | 10.jpg| 800 | 600 |
我需要做一个mysql查询ORDER BY RAND()
打印5 images
,订单是:
first: width >= 720 and height >= 560 , 1 image(this may be width < height)
second: width > height, 2 images.(left the first 1 image, do the rest 9 images ORDER BY RAND())
third: width >= 640, 2 images.(left above 3 images, do the rest 7 images ORDER BY RAND())
所有5张图片都没有重复。我的思绪现在很困惑,需要帮助。
答案 0 :(得分:5)
好吧,如果我正确理解你的问题,你想要做一些像
这样的事情(SELECT image FROM tab WHERE(first) ORDER BY RAND() LIMIT 1)
UNION
(SELECT image FROM tab WHERE(second) ORDER BY RAND() LIMIT 2)
UNION
(SELECT image FROM tab WHERE(third) ORDER BY RAND() LIMIT 2)
在每个WHERE子句中,用正确的约束替换first
,second
和third
......
答案 1 :(得分:2)
SELECT id
FROM
( ( SELECT MIN(q) AS q,id
FROM
( (SELECT 1 AS q, id FROM image WHERE(first) ORDER BY RAND() LIMIT 1)
UNION ALL
(SELECT 2,id FROM image WHERE(second) ORDER BY RAND() LIMIT 3)
) AS tmp2
GROUP BY id
ORDER BY MIN(q)
LIMIT 3
)
UNION ALL
(SELECT 3, id FROM image WHERE(third) ORDER BY RAND() LIMIT 5)
) AS tmp3
GROUP BY id
ORDER BY MIN(q)
LIMIT 5
答案 2 :(得分:1)
您可以按多个不同的值进行排序。
您甚至可以通过布尔表达式的结果进行排序,其中true被视为高于false的值(因此DESC首先为您提供true。)
你只需在每个ORDER BY子句之间加一个逗号。
以下是您的示例:
select *
from foo
ORDER BY
( width >= 729 AND height > 560 ) DESC,
( width > height ) DESC,
( WIDTH >= 640 ) DESC,
RAND()
祝你好运。