我创建了一个标准:
$ids = array(1,2,3);
$criteria = new CDbCriteria;
$criteria->select = 'SUM(quantity) as quan';
$criteria->with = array('order');
$criteria->condition="order.customer = ".Yii::app()->user->id." AND order.status_id <> 4 AND order.status_id <> 3 AND order.type = 0";
$criteria->addInCondition("product_id", $ids);
$order_prod = OrderProduct::model()->find($criteria);
但是当我运行这个时我得到了错误:
1140在没有GROUP BY的聚合查询中,SELECT列表的表达式#2包含非聚合列'als.t.id';这与sql_mode = only_full_group_by不兼容。执行的SQL语句是:SELECT SUM(quantity)as quan,
t
。id
ASt0_c0
,order
。id
ASt1_c0
,order
。phone
ASt1_c1
,order
。t1_c2
。
在标准中,选择我只使用数量之和。
答案 0 :(得分:1)
嗨禁用only_full_group_by
试试这个sql
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
答案 1 :(得分:0)
您希望仅从OrderProduct表中获取数量总和。因此,最好不要使用活动记录,而是使用查询编写简单命令,如下所示:
$result = Yii::app()->db->createCommand('
SELECT SUM(t.quantity) as quan
FROM order_product t
LEFT JOIN order ON order.ID = t.order_id
WHERE
order.customer = :userId AND
order.status_id NOT IN (3,4) AND
order.type = 0 AND
t.product_id IN (1,2,3)
')->queryScalar([
':userId' => Yii::app()->user->id,
]);
这里“db”是CDbConnection组件的名称。 OrderProduct表名和连接条件可能在您的系统中有所不同。