【发布时间】:2012-12-04 12:00:33
【问题描述】:
我有两张桌子order 和order_version
order
| id |
| 1 |
| 2 |
order_version
| id | order_id | status |
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 1 | 1 |
| 4 | 1 | 2 |
我想查找所有已更改版本的订单。这意味着我只想通过id='1' 获得订单,因为另一个没有更改并且只有一个版本。
试过这个:
1) $criteria = new CDbCriteria();
2) $criteria->with = array('orderVersions');
3) $criteria->addCondition("(SELECT MAX(status) FROM order_version) != '0'");
4) $criteria->addInCondition('order.id', $orderArray);
5) $criteria->order = 'order.id DESC';
6) $orders = Order::model()->findAll($criteria);
$orderArray变量是orderids的数组。
首先问题出在第4行。
Column not found: 1054 Unknown column 'order.id' in 'where clause'
如果我只做id 而不是order.id 那么我有
Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous.
第 5 行同样的问题。
另:yii中的子查询我真的不知道怎么用,就是第3行了。
有什么建议吗?
【问题讨论】:
-
Yii 不关心原始表名,在本例中为
order,它只关心关系名称。原始表始终别名为t和order_version在这种情况下为orderVersions。 -
好的,有了别名就很清楚了,谢谢。子查询呢?实际上,如果我将
order_version替换为orderVersions,则会出现错误Table 'imdb.orderVersions' doesn't exist。也许是因为 WHERE 子句?