thinkphp 单条查询改成随机查询

$info = M ( 'custom_reply_news' )->where ( $map )->find ();
上边这句怎么改成随机查询,谢谢了!

第1个回答  2014-07-27
// 第一种我测试了一下,需要0.5秒
$map = array('id'=> array('exp',' >= (SELECT FLOOR( MAX(id) * RAND()) FROM `'.C('DB_PREFIX').'custom_reply_news` )'));
$dd = M("custom_reply_news")->where($map)->order('id')->find();
dump($dd);  

// 第二种查询时间只有0.01秒
$map = array('id'=> array('exp',' >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)))'));
     $dd = M("custom_reply_news")->where($map)->order('id')->find();
     dump($dd);  

// 第三种加上了MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
$map = array('id'=> array('exp',' >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)-(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)) + (SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)))'));
$dd = M("custom_reply_news")->where($map)->order('id')->find();
dump($dd);    

// 第四种采用JOIN的语法比直接在WHERE中使用函数效率还要高很多
$dd = M("custom_reply_news t1")->join('(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)-(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`))+(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)) AS id) as t2')
 ->where("t1.id >= t2.id")->order('t1.id')->find();
dump($dd);

thinkphp 单条查询改成随机查询
\/\/ 第一种我测试了一下,需要0.5秒$map = array('id'=> array('exp',' >= (SELECT FLOOR( MAX(id) * RAND()) FROM `'.C('DB_PREFIX').'custom_reply_news` )'));$dd = M("custom_reply_news")->where($map)->order('id')->find();dump($dd); \/\/ 第二种查询时间...

相似回答