Как я могу написать этот код в MySQL короче и лучше?

#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 .