вопрос про mysql запрос

210
27 февраля 2017, 14:21

здравствуйте, есть таблица questions с полем answers (int), и есть таблица answers с полем (question_id)

как можно обновить поле answers у всех questions, чтобы было ровно столько записей сколько есть записей в таблице answers с полем questions_id = id запись в questions

Answer 1

Если не ошибаюсь, можно так:

UPDATE `questions` q 
SET q.`answers` = (
        SELECT COUNT(`question_id`) 
        FROM `answers` a 
        WHERE a.`question_id` = q.`id`
)

Но как правильно подметил @Mike в комментарии:

Существование этого поля является избыточным и его надо постоянно обновлять. в таких случаях принято не создавать поле, а вычислять количество на ходу.

Answer 2
UPDATE 
  questions q left join 
      (select count(aa.id) as c, aa.questions_id 
        from answers aa 
        group by aa.questions_id) a 
  on a.questions_id=q.id
  set q.answers=a.c;

Тест: http://sqlfiddle.com/#!9/f4c853/1

READ ALSO
Автозагрузка php-классов

Автозагрузка php-классов

Переписываю движок с процедурного метода на ООПСоздаю несколько классов в начале каждого пишу

258
Постраничный вывод запроса php

Постраничный вывод запроса php

ЗдравствуйтеПомогите с таким кодом

224
Роутинг в Codeigniter

Роутинг в Codeigniter

Есть маршруты по которым при переходе страница отображается нормально, например $route['about-us'] = "main/about_us"; Пытаюсь создать новый урл $route['new_about_us']...

232