2

我有一个名为 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) 属性,这不在我的模型中。我想我必须将它添加到我的模型中,但我不喜欢这样,因为我只需要它一次。

4

2 回答 2

5

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

然而,如果你用 CDbCriteria 来做会更好(你需要一个模型属性,你是对的)。

假设该属性被调用,它看起来像这样countUppercat

$criteria = new CDbCriteria;
$criteria->select = 'uppercat, COUNT(uppercat) AS countUppercat';
$criteria->group = 'countUppercat';
$models = CategorieModel::model()->findAll($criteria);
于 2012-05-30T16:47:38.120 回答
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);

所以你得到了数组..

它会为你工作..

于 2012-05-30T18:33:37.953 回答