#mysql #sql
#mysql #sql
Вопрос:
В базе данных есть 3 таблицы, и они не имеют никакого отношения. Как я могу написать этот код в краткой форме? Извините за мой плохой английский.
Код MySQL;
SELECT
*,
(SELECT COUNT(c2.id) FROM comments AS c2 WHERE c2.phone_number = comments.phone_number AND c2.country_code = comments.country_code AND c2.approve = "0" AND c2.deleted_at IS NULL) AS comment_count,
(SELECT COUNT(f.id) FROM flag_numbers AS f WHERE f.phone_number = comments.phone_number AND f.country_code = comments.country_code AND comments.approve = "0" AND comments.deleted_at IS NULL) AS flag_count
FROM comments
WHERE approve = "0" AND deleted_at IS NULL
ORDER BY id DESC
Комментарии:
1. очевидно, кажется, что у них есть отношения в терминах некоторых столбцов.
Ответ №1:
Ваш код довольно хорош, но следующий немного проще:
SELECT c.*,
COUNT(*) OVER (PARTITION BY c.phone_Number, c.country_code) as comment_count,
(SELECT COUNT(f.id)
FROM flag_numbers f
WHERE f.phone_number = c.phone_number AND
f.country_code = c.country_code
) AS flag_count
FROM comments c
WHERE c.approve = '0' AND c.deleted_at IS NULL
ORDER BY id DESC;
Если approve
это число, то удалите одинарные кавычки. Не заключайте числовые константы в кавычки.
Различия:
- Замена первого подзапроса оконной функцией для
comment_count
. - Удаление избыточных фильтров комментариев в
flag_count
.