使用MySQL选择查询以特定数据组的随机顺序对记录进行排序

时间:2017-08-16 13:45:24

标签: mysql sql select sql-order-by

我有一个下面的db表结构:

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

3 个答案:

答案 0 :(得分:1)

怎么样

import {render} from 'react-dom';

import {Provider} from 'react-redux';

import { Router, browserHistory } from 'react-router';

import Sstore from './store/configureStore.js';

import routes from './routes';

import {loadMovies} from './actions/movieActions.js';

const store = Sstore;

store.dispatch(loadMovies());

render(  
  <Provider store={store}>

    <Router history={browserHistory} routes={routes} />
  </Provider>,
  document.getElementById('app')
);


#routes.js #

import React from 'react';  
import { Route, IndexRoute } from 'react-router';  
import Home from './components/Home.js';  


export default (  
  <Route path="/" component={Home}>

  </Route>
);`

这将对匹配的行使用随机排序,然后将其他行放在最后,并按日期排序。

但要注意性能。任何变体中的SELECT * FROM agency_mst ORDER BY IF(is_premium=1, RAND(), -1.0), date_added DESC 都是具有多行的表中臭名昭着的性能反模式。

答案 1 :(得分: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

答案 2 :(得分: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

检查这个使用rand()* - 15你得到-velue它先显示并保持为0,这将是按date_added排序