mysql クエリのヘルプが必要です。プライマリ テーブルに 2 つのカウント テーブルが結合されています。ユーザー アクティビティに関するものです。ユーザーのアクティビティ (コメントと記事) をカウントして合計し、1 つの変数にまとめてから、DESC で並べ替えます。メインテーブルはユーザー、サブテーブルは記事とコメントです。
SELECT u.id, u.username, u.avatar,
IF(comm.id, COUNT(DISTINCT comm.id), 0) AS count_comments,
IF(comm.votes, SUM(DISTINCT comm.votes), 0) AS count_comments_votes,
IF(article.id, COUNT(article.id), 0) AS count_articles,
IF(article.views, SUM(DISTINCT article.views), 0) AS count_articles_views,
(IF(comm.id AND comm.votes>2, COUNT(comm.id)*50, 0) + IF(comm.votes, SUM(comm.votes)*10, 0) + IF(article.id, COUNT(article.id)*200, 0) + IF(article.views, SUM(article.views)*1, 0)) AS points
FROM users AS u
LEFT JOIN comments AS comm ON comm.id_user=u.id AND comm.date>='2013-05-01' AND comm.date<='2013-06-24'
LEFT JOIN articles AS article ON article.id_user=u.id AND article.date>='2013-05-01' AND article.date<='2013-06-24'
WHERE u.is_active='1'
GROUP BY u.id
HAVING points>0
ORDER BY points DESC
クエリが11-13
完了するまでに約 1 秒かかりましたが、これは長すぎます。何か案は ?いくつかのフィールドにインデックスを付けると、クエリが高速化される可能性がありますか?