0
下面是我的數據庫表如何將這種原始查詢轉換成ActiveRecord的在Yii框架2
left_table
id name
1 A
2 B
3 C
4 D
5 E
right_table
id left_table_id size date_time
1 1 xs 2017-06-13 14:20:00
2 3 s 2017-06-13 14:25:00
3 2 xs 2017-06-13 14:27:00
4 1 s 2017-06-13 14:30:00
5 2 m 2017-06-13 14:32:00
6 2 xs 2017-06-13 14:33:00
7 3 xl 2017-06-13 14:40:00
8 4 s 2017-06-13 14:41:00
9 4 m 2017-06-13 14:45:00
10 5 m 2017-06-13 14:46:00
下面是原始SQL查詢的最大(DATE_TIME)DESC其中DATE_TIME得到left_table訂單記錄< = NOW(),結果如下。受最高(add_time)DESC
SELECT t.id, t.name, r.date_time
FROM left_table AS t
JOIN (
SELECT id, MAX(date_time) AS date_time
FROM right_table
WHERE date_time <= NOW()
GROUP BY id
) AS r ON t.id = r.id
ORDER BY r.date_time DESC;
結果left_table順序
id name max(add_time)
2 B 2017-06-13 14:33:00
1 A 2017-06-13 14:30:00
3 C 2017-06-13 14:25:00
這是因爲4 left_table_id
和5 date_time
是> NOW()。假設NOW() = 2017-06-13 14::35:00
。請注意,left_table_id 3有一個add_time > NOW()
,但它仍然被選中,因爲它有其他權利記錄,add_time <= NOW()
。
如何使用ActiveRecord
或ActiveQuery
在Yii Framework 2
中獲得相同的結果?該ActiveRecord
或ActiveQuery
是爲Yii GridView
與ActiveDataProvider
或Pagination
與LinkPager