记录排序

问题描述:

我有如下数据库表结构:记录排序

Tablename : agency_mst 
Fields: 
id 
name 
is_premium 
date_added 

我想对数据进行排序,以便与is_premium机构1谈到=第一其余数据按date_added desc排序。

而且还有is_premium = 1分的记录,应在随机顺序排序。所以第一套高级代理商会有随机订单。我如何使用MySQL Select查询来做到这一点。

我已经建立了这个查询的一部分,但不知道如何过滤特定的一组数据。下面是查询:

SELECT * FROM agency_mst 
ORDER BY is_premium DESC, date_added DESC 

如何

SELECT * 
    FROM agency_mst 
ORDER BY IF(is_premium=1, RAND(), -1.0), date_added DESC 

将使用随机排序的匹配行,然后把别人上了,按日期排序。

不过要注意性能。 ORDER BY RAND()在任何变体中都是具有许多行的表中臭名昭着的性能反模式。

+0

谢谢,只是尝试这样做,但是当有只有一个is_premium = 1的机构,那么它不会成为*的。 – aslamdoctor

+0

对您的查询稍作修改修复此问题 IF(is_premium = 1,RAND(),-1.0)DESC, 谢谢:) – aslamdoctor

select t1.id,t1.name,t1.is_premium,t1.date_added from 
(select (ROW_NUMBER() over (order by id))* cast(CRYPT_GEN_RANDOM(10) as int) RND,* from agency_mst) t1 
order by t1.RND 

 
SELECT id, name, is_premium , date_added ,if(is_premium ,rand()*-15,0) as first_order 
FROM agency_mst 
ORDER BY first_order, date_added DESC 

检查这个使用兰特()* - 15你-velue它表明第一,并保持为0,这将是为了通过DATE_ADDED