duanmeng1862 2015-04-02 05:20
浏览 257
已采纳

Yii createCommand不会返回正确的结果

I am trying to get a random ID from a table with a specific visiblity=2 clause but I am having issues getting it to return the ID, it says 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'];

Is his not the correct way?

I figured out another solution using the already loaded info from my original version without guest check.

    $max = Space::model()->count();
    $randId = rand(0,$max);
    $space = Space::model()->find(array('offset'=>$randId));
    if ($space->attributes['visibility'] == 2) {
  • 写回答

3条回答 默认 最新

  • dsigh7478 2015-04-02 05:50
    关注

    You can use ORDER BY RAND() instead of id = rand(). Also you can use ->queryScalar() to get only ID directly.

    $space = Yii::app()->db->createCommand()
         ->select('id')
         ->from('space')
         ->where('visibility = 2')
         ->order('RAND()')
         ->limit(1)
         ->queryScalar();
    
     echo $space;
    

    Keep in mind that RAND() is slow solution. Check alternatives.
    Also, if you get no entries from database, you have to check that case:

    if (!empty($space)) { // id will never be 0
        // Do something with $space
    } else {
        throw new CHttpException(404, 'No data found');
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)