Tôi vẫn đang làm việc toàn bộ chức năng của CDbCriteria trong Yii 1.xx - Tôi có một truy vấn SQL khá phức tạp mà tôi muốn chuyển đổi sang sử dụng định dạng CDbCriteria với các truy vấn trong mô hình (nếu điều này là có thể với một truy vấn phức tạp hơn.Chuyển đổi truy vấn này sang định dạng CDbCriteria trong Yii
nỗ lực ban đầu của tôi lúc này ..
$criteria = new CDbCriteria;
$criteria->select = array(
't.classroom_id, title',
'COALESCE(COUNT(DISTINCT r.redeemed_code_id),0) AS totalRewards',
'COALESCE(COUNT(DISTINCT ocm.user_id),0) AS totalStudents',
'COALESCE(SUM(r.points),0) AS totalPoints'
);
bất cứ ai có thể đề xuất những cách tốt nhất để đi về vấn đề này bằng cách sử dụng truy vấn sau đây? Bất cứ lời khuyên được khuyến khích nhờ ..
SELECT
t.classroom_id,
title,
COALESCE (r.classRewards, 0) AS totalRewards,
COALESCE (r.classPoints, 0) AS totalPoints,
COALESCE (COUNT(DISTINCT ocm.user_id), 0) AS totalStudents
FROM
organisation_classrooms t
LEFT JOIN (select crc.classroom_id,
COUNT(DISTINCT crc.redeemed_code_id) AS classRewards,
SUM(crc.points) as classPoints
from classroom_redeemed_codes crc
JOIN organisation_classrooms t
ON crc.classroom_id = t.classroom_id
AND t.organisation_id = 37383
where crc.inactive = 0
AND (crc.date_redeemed >= 1393286400
OR crc.date_redeemed = 0)
group by crc.classroom_id) r
ON t.classroom_id = r.classroom_id
LEFT OUTER JOIN organisation_classrooms_myusers ocm
ON t.classroom_id = ocm.classroom_id
WHERE
t.organisation_id = 37383
GROUP BY title
ORDER BY t.classroom_id ASC
LIMIT 10
Tôi nghĩ rằng nó tốt hơn không sử dụng CDbCriteria cho các truy vấn phức tạp như vậy. Bạn có thể thử sử dụng CDbCommandBuilder thay vì – Gihan