PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Sunday, February 20, 2022

[FIXED] Yii1 MYSQL Join 4 Tables in where class and group

 February 20, 2022     mysql, php, yii     No comments   

Issue

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.


Solution

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);


Answered By - ScaisEdge
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing