$paymentIDs = Yii::app()->db->createCommand('SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL')->bindValue(':pid', $pid)->queryAll();
$total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN ('.implode(",", $paymentIDs).') AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();
以上是我的查询代码。如您所见,我根据某个标准查询payment_id
(s)。我现在有一组数字。
当我执行第二个查询时,它失败了,给我一个错误
数组到字符串转换
我也试过这个:
$total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN ('.implode(",", $paymentIDs['payment_id']).') AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();
现在,这给我一个错误说:
未定义的索引:payment_id
有人可以指出我的错误吗?非常感谢您的帮助。
感谢。
答案 0 :(得分:1)
第一个查询的结果$paymentIDs
是一个数组数组(或普通对象,我不确定)。您可以尝试在IDE中检查它,或者只需使用var_dump
查看其结构。您可以使用listData
method of the CHtml class更接近您想要的内容,例如:
$ids = CHtml::listData($paymentIDs, 'payment_id', 'payment_id');
这会将您的数组展平为一个字符串数组。然后...
implode(",", $ids)
...会给你想要的结果。
答案 1 :(得分:1)
您可以使用单个查询解决此问题:
$total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN (SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL) AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':pid', $pid)->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();
谢谢你:)
答案 2 :(得分:1)
payment_id
s的数组)。
要获取某些列的值数组,可以使用->queryColumn()
。
所以第一个查询必须是: $paymentIDs = Yii::app()->db->createCommand('SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL')->bindValue(':pid', $pid)->queryColumn()
如果变量$monthStart
和$monthEnd
具有string
类型(或者可以转换为string
的类型),则代码必须正常工作。
bindValues
代替双bindValue
。