MYSQL UNION排序

时间:2014-03-07 19:55:28

标签: mysql sorting union

任何人都可以给我一些指导来实现这个吗?

我想将查询合并到一个具有不同排序的列表中。 第一个是随机排序的聚光灯,然后按字母顺序排序所有其他列表。

这就是我正在使用的,但排序不起作用。

(SELECT * FROM business_listings WHERE city='Toronto' AND spotlight='1' ORDER by rand())
UNION
(SELECT * FROM business_listings WHERE city='Toronto' AND spotlight='0' ORDER BY busname)

2 个答案:

答案 0 :(得分:3)

您可能不需要UNION,请使用CASE中的ORDER BY条款,如下所示:

SELECT * 
FROM business_listings 
WHERE city='Toronto'
ORDER BY CASE 
  WHEN spotlight='1' THEN FLOOR(RAND()*10) 
  WHEN spotlight='0' THEN 10 
END, busname

它将做的是,对于聚光灯= 1的记录,使用随机值(从0到9)对记录进行排序。而所有具有spotlight = 0的记录都会稍后出现,因为ORDER BY将使用值10作为排序顺序。

工作演示:http://sqlfiddle.com/#!2/1bf6e/1

答案 1 :(得分:0)

来自this SO question

<强> Example Fiddle

试试这个:

SELECT *
FROM (SELECT * 
      FROM business_listings
      WHERE city='Toronto'
      AND spotlight='1'
      ORDER by rand()) as t1
UNION ALL
SELECT *
FROM (SELECT *
      FROM business_listings
      WHERE city='Toronto'
      AND spotlight='0'
      ORDER BY busname) as t2