我有一个名为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)的属性,这不在我的模型中。我想我必须将它添加到我的模型中,但我不喜欢这样,因为我只需要它一次。
答案 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);
所以你得到了数组..
它会对你有用..