Чтобы исправить ошибку, мне нужно выполнить итерацию по всем строкам таблицы, обновив кешированный счетчик детей до его реального значения. Структура вещей в таблице формирует дерево.Обновление кэшированных подсчетов в MySQL
В рельсах, следующий делает то, что я хочу:
Thing.all.each do |th|
Thing.connection.update(
"
UPDATE #{Thing.quoted_table_name}
SET children_count = #{th.children.count}
WHERE id = #{th.id}
"
)
end
Есть ли способ сделать это в одном запросе MySQL? Альтернативно, есть ли способ сделать это в нескольких запросах, но в чистом MySQL?
Я хочу что-то вроде
UPDATE table_name
SET children_count = (
SELECT COUNT(*)
FROM table_name AS tbl
WHERE tbl.parent_id = table_name.id
)
кроме выше не работает (я понимаю, почему он не делает).
создание временной таблицы для решения этой проблемы. –
@Steven Почему вы думаете, что это плохая идея? –
, потому что вы могли бы решить это проще и быстрее с помощью подзапроса. –