我有用于向客户交付物品的数据库。为此,我有4个表,delivery_logs,交付,驱动程序,客户
(我们有交货日志表导致一次交货有很多条目,如未送达和其他司机接收交货等)
delivery_log
id delivery_id driver_id message date_added
1 1 1 OK 2016-09-13 17:38:15
2 2 2 OK 2016-09-13 17:35:18
3 1 1 Not OK 2016-09-13 17:33:10
4 1 3 OK 2016-09-13 17:32:13
5 2 4 waiting 2016-09-13 17:20:11
delivery
delivery_id customer_id name status
1 1 delivery 1 done
2 1 delivery 2 done
3 2 delivery 3 done
driver
driver_id name
1 driver1
2 driver2
3 driver3
customer
customer_id first_name last_name
1 name1 other name1
2 name2 other name2
3 name3 other name3
4 name3 other name4
现在我想查询
来自delivery_log的最后1条记录(按date_added排序)
每个司机的每次交付
交货=完成
我希望有下面的字段
delivery_log.delivery_id delivery_log.driver_id delivery_log.message date_added
delivery.name driver.name
customer.first_name customer.last_name
我的delivery_log
表格超过 991065
如何构建YII Active Record查询来执行此操作?
感谢您的帮助。
答案 0 :(得分:0)
您应该使用“join”和“group”CDbCriteria属性。
$criteria->join = ' INNER JOIN "delivery" del ON del.id = t.delivery_id';
$criteria->join .= ' INNER JOIN "driver" dri ON dri.id = t.driver_id';
$criteria->join .= ' INNER JOIN "customer" cus ON cus.id = del.customer_id';
然后,您可以在“条件”“排序”和/或“分组依据”中使用已连接的表
$criteria->addCondition('del.status = \'done\'');
$criteria->order = 't.date_added';
使用数据提供者获取所需的数据。
$dataProvider = new CActiveDataProvider('delivery_log', array(
'criteria' => $criteria,
));
这不是一个完整的答案,但它可以帮助你继续找到你需要的东西。