Yii1连接4个条件表

时间:2016-09-22 13:15:06

标签: php mysql yii

我有用于向客户交付物品的数据库。为此,我有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查询来执行此操作?

感谢您的帮助。

1 个答案:

答案 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,
    ));

这不是一个完整的答案,但它可以帮助你继续找到你需要的东西。