私はこのクエリを持っています:
SELECT (COUNT (questions.id) / 10) AS totalPages,
COUNT (DISTINCT answers.id) AS answers,
COUNT (DISTINCT views.id) AS views,
(SELECT(COUNT (if (votes.vote = 'up', 1, NULL)) - COUNT (if (votes.vote = 'down', 1, NULL)))
FROM votes
WHERE table = 'questions' AND tableId = questions.id) AS votes
FROM questions
LEFT JOIN
users
ON questions.USER = users.id
LEFT JOIN
answers
ON questions.id = answers.question
LEFT JOIN
views
ON questions.id = views.question
LEFT JOIN
votes
ON questions.id = votes.tableId AND votes.table = 'questions'
GROUP BY questions.id
ORDER BY questions.date DESC
LIMIT :limit
この投稿のトピックは、votes
フィールドについてです。それは非常に最適化されていないと感じており、それを実装する方法について別の方法に取り組む手助けが必要です.
vote
の tableID が question.id と等しいすべての結果を取得し、テーブルvote
内のフィールドvotes
がアップの場合は 1 としてカウントし、そうでない場合は 1 を引きます (明らかにダウンになるため)。
サブクエリを使用せずに試してみました
SUM( IF(votes.vote='up',1,-1) ) as votes
しかし、グループ化すると、結果は非常に間違ったものになります。追加も試みましDISTINCT
たが、すべての値が -1 または 1 になりました。