#php #mysql #yii
#php #mysql #yii
Вопрос:
Я новичок в YII1 и хочу запросить одну базу данных
У меня есть база данных для доставки товаров клиентам. для этого у меня есть 4 таблицы,
delivery_logs
delivery
driver
customer
(у нас есть таблица журнала доставки, потому что некоторое время в одной доставке было много записей, таких как «не доставлено», «другой драйвер принимает доставку» и т.д.)
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
теперь я хочу получить запрос
last 1 record (order by date_added) from delivery_log
for each delivery by each driver
где доставка = выполнена
и я хочу иметь следующие поля
delivery_log.delivery_id delivery_log.driver_id delivery_log.message date_added
delivery.name driver.name
customer.first_name customer.last_name
Я использую
$criteria=new CDbCriteria;
он работает и получает последнюю запись с помощью приведенного ниже
$criteria->order = 't.date_added DESC';
но когда я помещаю
$criteria->group = 't.delivery_id,t.driver_id';
$criteria->order = 't.date_added DESC';
это не вернуло последнюю запись….
Спасибо за любую помощь.
Ответ №1:
для сложного запроса, связанного с моделью, вы можете использовать findAllBySql, где вы используете плоское продолжение для восстановления нужных вам моделей
$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);
используя такого рода функции, вы можете, например::
$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);