记录排序
问题描述:
我有如下数据库表结构:记录排序
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()
在任何变体中都是具有许多行的表中臭名昭着的性能反模式。
答
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
谢谢,只是尝试这样做,但是当有只有一个is_premium = 1的机构,那么它不会成为顶级的。 – aslamdoctor
对您的查询稍作修改修复此问题 IF(is_premium = 1,RAND(),-1.0)DESC, 谢谢:) – aslamdoctor