Для пересчета статистики приходится писать сложные запросы с большим количеством вложенности, вида:
UPDATE staff
SET rating = (
(
SELECT SUM(value * weight) AS a
FROM `ratings`
WHERE entity_type = 'DOCTOR'
AND entity_id = staff.url
AND entity_city = (SELECT city
FROM clinics
WHERE clinics.account_id = staff.account_id
)
AND published = 1
)
/
(
SELECT SUM(weight) AS b
FROM `ratings`
WHERE entity_type = 'DOCTOR'
AND entity_id = staff.url
AND entity_city = (SELECT city
FROM clinics
WHERE clinics.account_id = staff.account_id
)
AND published = 1
)
),
ratingCommentCount = (
SELECT COUNT(*) AS count
FROM `ratings`
WHERE entity_type = 'DOCTOR'
AND entity_id = staff.url
AND entity_city = (SELECT city
FROM clinics WHEREclinics.account_id = staff.account_id
)
AND published = 1
);
Есть ли какие то правила по написанию многоэтажного ЧИТАБЕЛЬНОГО sql кода?
При написании через Query Builder читабельность становится еще хуже, да и писать иногда сложнее если логика сложнее простой выборки.
Выполнять отдельными запросами - на порядок медленнее на большой таблице (250.000).
Советовать оптимизировать запрос или денормализировать выше не надо, это для примера.
На PHP пробовал писать как то так:
$aSumSql = 'SELECT SUM(value * weight)';
$bSumSql = 'SELECT SUM(weight)';
DB::update("UPDATE staff SET rating = ($aSumSql) / ($bSumSql), ...............");
Но не ясно, так красивее или еще хуже. =)
Написано 2 минуты назад