php - Yii createCommand 不返回正确的结果

标签 php mysql yii

我试图从具有特定 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() 是一个缓慢的解决方案。 Check alternatives .
另外,如果你没有从数据库中得到任何条目,你必须检查这种情况:

if (!empty($space)) { // id will never be 0
    // Do something with $space
} else {
    throw new CHttpException(404, 'No data found');
}

关于php - Yii createCommand 不返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29405488/

相关文章:

java - 如何在 JDBC 应用程序中使用动态对象

Mysql在另一个函数中调用函数

php - Yii2 - 错误请求 (#400) 无法验证您的数据提交

php - 正确的 PHP 循环显示帖子类别

mysql - 我们可以在 FROM 之后选择表来做一个 mySQL CASE 吗?

php - 创建在线相册的首选方法是什么?

php - Cgridview 'filter' 属性出错,错误代码::没有方法 'querystring'

php - 不在单个模型中存储两个日期字段

javascript - 如何打印 iframe 谷歌文档查看器打开的文档

php - PHP 头函数的替代品