从数据库中获取特定数据

时间:2012-05-30 16:38:56

标签: yii

我有一个名为Category的表,其中包含几列,我只想从我的数据库中获取一些。

所以我试过这个:

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;';
$d = Yii::app()->db->createCommand($sql)->query();

但我发现输出很奇怪。我试图做一个array_shift但是我得到一个错误,这不是一个数组。当我在$ d上执行var_dump时:

object(CDbDataReader)[38]
  private '_statement' => 
    object(PDOStatement)[37]
      public 'queryString' => string 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;' (length=100)
  private '_closed' => boolean false
  private '_row' => null
  private '_index' => int -1
  private '_e' (CComponent) => null
  private '_m' (CComponent) => null

好的..然后我在$ id上做了一个foreach:

array
  'id' => string '0' (length=1)
  'uppercat' => string '6' (length=1)
array
  'id' => string '3' (length=1)
  'uppercat' => string '2' (length=1)
array
  'id' => string '6' (length=1)
  'uppercat' => string '1' (length=1)
array
  'id' => string '7' (length=1)
  'uppercat' => string '2' (length=1)
array
  'id' => string '9' (length=1)
  'uppercat' => string '2' (length=1)

那么为什么我得到$ id不包含数组的数组的消息呢?

有没有其他方法可以从我的数据库中获取某些特定数据,然后我可以对它们执行array_shift?我也试过用findAllBySql做这个,但是我无法达到COUNT(uppercat)的属性,这不在我的模型中。我想我必须将它添加到我的模型中,但我不喜欢这样,因为我只需要它一次。

2 个答案:

答案 0 :(得分:5)

CDbCommand的query返回一个CDbDataReader对象,用于获取查询结果。请改用queryAll,返回行数组。

但是,如果你使用CDbCriteria更好(你需要一个模型属性,你是对的)。

假设该属性名为countUppercat

,它看起来像这样
$criteria = new CDbCriteria;
$criteria->select = 'uppercat, COUNT(uppercat) AS countUppercat';
$criteria->group = 'countUppercat';
$models = CategorieModel::model()->findAll($criteria);

答案 1 :(得分:3)

尝试这个..它关闭了你用过的......

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM categorie GROUP BY uppercat;';
$d = Yii::app()->db->createCommand($sql)->queryAll();

之后,当你想看到你的数组使用时,

print_r($d);

所以你得到了数组..

它会对你有用..