我正试图从一个带有特定visiblity=2
子句的表中获取一个随机ID,但我在获取它返回ID时遇到了问题,它说Undefined index: id
。
$space = Yii::app()->db->createCommand()
->select('id')
->from('space')
->where('id=rand() AND visibility=2')
->limit(1)
->queryAll();
//->queryRow();
echo $space['id'];
他的方式不对吗?
我在没有访客检查的情况下,使用我原始版本中已经加载的信息找到了另一个解决方案。
$max = Space::model()->count();
$randId = rand(0,$max);
$space = Space::model()->find(array('offset'=>$randId));
if ($space->attributes['visibility'] == 2) {
您可以使用ORDER BY RAND()
而不是id = rand()
。您也可以使用->queryScalar()
直接获取ID。
$space = Yii::app()->db->createCommand()
->select('id')
->from('space')
->where('visibility = 2')
->order('RAND()')
->limit(1)
->queryScalar();
echo $space;
请记住,RAND()
是一个缓慢的解决方案。检查备选方案
另外,如果您没有从数据库中得到任何条目,您必须检查该情况:
if (!empty($space)) { // id will never be 0
// Do something with $space
} else {
throw new CHttpException(404, 'No data found');
}
您在where子句中使用了随机id,因此$space
可能是一个基于条件的空数组。例如,如果没有id == 3
的记录,并且随机生成的id为3,则$space
为空值。所以$space['id']
导致Undefined index
错误。你需要确保数组不是空的,然后回显数组的id:
if($space != null)
echo $space['id'];
$spaceId = Yii::app()->db->createCommand()
->select('id')
->from('space')
->where('visibility=2')
->orderBy(RAND())
->limit(1)
->queryScalar();
echo $spaceId;