二次表の行に基づいて、mysqlのmysqlの列の再集計列
-
20-09-2019 - |
質問
2つのテーブルでデータベースを引き継ぎ、名前を付けましょう entries
と comments
。 entries
テーブルには、entry_idが入った行の量を保持するcomment_countという名前の列が含まれています comments
その行に対応します entries
.
最近、この接続は、コードベースのバージョンの切り替えにより、ひどく同期できなくなりました。これらの数値を再度同期するために、phpmyadminで実行するためのクエリを構築するために助けが必要です。列の量 entries
約8000で、行があります comments
約80000なので、同期クエリを実行するのに問題はありません。
構造:
entries
伯爵:id
|comment_count
|等comments
含むid
|blogentry_id
|等
私が考えることができる唯一の方法は、各エントリをループすることです entries
PHPを備えたテーブルと個別に更新しますが、それは純粋なSQLソリューションと比較して非常に壊れやすいようです。
私はどんな助けのために評価します!
解決
純粋なSQLソリューションは、サブクエリを使用して、ドライバーとしてエントリテーブルを持つコメントテーブルからカウントを収集すると思います。次のようなものは、エントリテーブルの上に「ループ」し、各行に対してサブクエリを実行し(誤った用語である可能性があります)、コメント数を補助テーブルの対応するカウントのコメント数に更新する必要があります。それが役立つことを願っています!
UPDATE entries ent
SET comment_count =
(SELECT COUNT ( * )
FROM comments cmt
WHERE cmt.blogentry_id = ent.id)
他のヒント
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
所属していません StackOverflow