doupao6698 2016-10-19 10:36
浏览 34
已采纳

Yii1 MYSQL在类和组中加入4个表

I am new to YII1 and I want to query one database

I have database for delivery of items to customers. for this I have 4 tables,

delivery_logs 
delivery
driver
customer

(we have delivery log table cause some time one delivery have many entries like not delivered & other driver take delivery etc)

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

now I want to have query of

last 1 record (order by date_added) from delivery_log 
for each delivery by each driver

where delivery= done and I want to have bellow fields

delivery_log.delivery_id  delivery_log.driver_id delivery_log.message date_added 
delivery.name driver.name 
customer.first_name customer.last_name

I am using

$criteria=new CDbCriteria;

it's working and getting the last record with bellow

$criteria->order = 't.date_added DESC';

but when I put

$criteria->group = 't.delivery_id,t.driver_id';
$criteria->order = 't.date_added DESC';

this did't return last record....

Thanks for all help.

展开全部

  • 写回答

1条回答 默认 最新

  • donglang9880 2016-10-19 12:26
    关注

    for complex query related to a model you can use findAllBySql where you use a flat sequel for retrive the models you need

    $sql = 'SELECT colA, colB 
            FROM any_table as a
            INNER JOIN inner_join_table as b on  a.key = b.key
            LEFT JOIN  left_join_table as c on a.key = c.key
            WHERE a.col1 = .....'
    $model = MyModel::model()->findAllBySql($sql);
    

    using this kind of function you can eg::

    $sql = 'select 
             delivery_log.delivery_id,
             delivery_log.driver_id,
             delivery_log.message, 
             delivery_log.date_added,
             delivery.name,
             driver.name,
             customer.first_name,
             customer.last_name
             from delivery_log
             inner join delivery on delivery_log.key = delivery.key 
             .... 
             ...'
    $model= DeliveryLog::model()->findBySql($sql);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部