MySQL столбец пересчета в MySQL на основе строк во вторичной таблице - PullRequest
1 голос
/ 12 февраля 2010

Я взял на себя базу данных с двумя таблицами, давайте назовем их entries и comments. Таблица entries содержит столбец с именем comment_count, который содержит количество строк с entry_id в comments, соответствующих этой строке в entries.

В последнее время это соединение стало ужасно несинхронизированным из-за переключения версий кодовой базы. Мне нужна помощь для создания запроса для запуска в phpmyadmin для повторной синхронизации этих чисел. Количество строк в entries составляет около 8000, а строк в comments - около 80000, поэтому при выполнении запроса синхронизации не должно возникнуть никаких проблем.

Состав:

  • entries фонтаны:
  • id | comment_count | и т.д.
  • comments содержит
  • id | blogentry_id | и т.д.

Единственный способ, которым я могу придумать, - это зациклить каждую запись в таблице entries с помощью php и обновлять ее по отдельности, но это кажется чрезвычайно хрупким по сравнению с решением на чистом SQL.

Буду признателен за любую помощь!

Ответы [ 2 ]

3 голосов
/ 12 февраля 2010
INSERT
INTO    entries (id, comment_count)
SELECT  blogentry_id, COUNT(*) AS cnt
FROM    comments
GROUP BY
        blogentry_id
ON DUPLICATE KEY
UPDATE  comment_count = cnt
2 голосов
/ 12 февраля 2010

Я думаю, что чисто SQL-решение включало бы использование подзапроса для сбора подсчетов из таблицы комментариев, имеющей таблицу записей в качестве драйвера. Нечто подобное следующему должно «зацикливаться» над таблицей записей и для каждой строки выполнять подзапрос (который может быть неправильной терминологией) и обновлять счетчик комментариев, чтобы он соответствовал счетчику соответствующих отсчетов вспомогательной таблицы. Надеюсь, это поможет!

UPDATE   entries ent
   SET   comment_count =
         (SELECT   COUNT ( * )
            FROM   comments cmt
           WHERE   cmt.blogentry_id = ent.id)
...