2017-08-16 136 views
2

我有如下數據庫表結構:記錄排序

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 

回答

1

如何

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

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