order by rand() 效率问题变换查询yii下使用例子

 随机取n条数据,使用order by rand() ,数据量不大情况下还OK,表里数据量多就不行了。变换查询方式:
sql语句变换:
SELECT * FROM 表名 WHERE id >= ((SELECT MAX(id) FROM 表名)-(SELECT MIN(id) FROM 表名)) * RAND() + (SELECT MIN(id) FROM 表名) limit 5;

Yii下查询带 where条件使用方法
$query = new \yii\db\Query();
$query->select(‘linkname,question,linkageid,content’);
$query->from(‘question as t1’);
$query->join(“JOIN”,”(SELECT ROUND(RAND() * (SELECT MAX(qid) FROM `question`)) AS id) as t2″);
$query->where(“t1.qid >= t2.id”);
$query->andWhere([‘in’,’linkageid’,$catids]);
//$query->andWhere(“linkageid !=0”);
$query->orderBy(“t1.qid ASC”);
$query->limit($num);
$question_info = $query->all();

发表评论

电子邮件地址不会被公开。 必填项已用*标注