Yii createCommand 不返回正确的结果
Yii createCommand not not returning correct results
我正在尝试从带有特定 visiblity=2
子句的 table 中获取随机 ID,但我在获取 return 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) {
您在 where 子句中使用了随机 id,因此 $space
根据条件可能是一个空数组。例如,如果您没有包含 id == 3
的记录并且随机生成的 ID 为 3,则 $space
为空值。所以 $space['id']
导致 Undefined index
错误。您需要确保数组不为空,然后 echo id of array:
if($space != null)
echo $space['id'];
queryAll 方法为您提供一个包含数据库对象的数组。
为了您的目的,您可以使用更简单易懂的代码:
$spaceId = Yii::app()->db->createCommand()
->select('id')
->from('space')
->where('visibility=2')
->orderBy(RAND())
->limit(1)
->queryScalar();
echo $spaceId;
您可以使用 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()
是一个缓慢的解决方案。 Check alternatives.
另外,如果你没有从数据库中得到任何条目,你必须检查这种情况:
if (!empty($space)) { // id will never be 0
// Do something with $space
} else {
throw new CHttpException(404, 'No data found');
}
我正在尝试从带有特定 visiblity=2
子句的 table 中获取随机 ID,但我在获取 return 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) {
您在 where 子句中使用了随机 id,因此 $space
根据条件可能是一个空数组。例如,如果您没有包含 id == 3
的记录并且随机生成的 ID 为 3,则 $space
为空值。所以 $space['id']
导致 Undefined index
错误。您需要确保数组不为空,然后 echo id of array:
if($space != null)
echo $space['id'];
queryAll 方法为您提供一个包含数据库对象的数组。 为了您的目的,您可以使用更简单易懂的代码:
$spaceId = Yii::app()->db->createCommand()
->select('id')
->from('space')
->where('visibility=2')
->orderBy(RAND())
->limit(1)
->queryScalar();
echo $spaceId;
您可以使用 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()
是一个缓慢的解决方案。 Check alternatives.
另外,如果你没有从数据库中得到任何条目,你必须检查这种情况:
if (!empty($space)) { // id will never be 0
// Do something with $space
} else {
throw new CHttpException(404, 'No data found');
}