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 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊