doupao6698 2016-10-19 18: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 20: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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效