このトピックは人気のあるトピックのようで、関連する投稿の数が確実に飽和状態になっているようですが、私はこれに 3 日間取り組んでいますが、これを理解することはできません。
私はこのサイトと、これに対する潜在的な解決策を備えた他の多くのサイトを精査してきましたが、いくつかは実行中ですが、期待した結果が得られません.
これが私がやろうとしていることです...
- ユーザーがレビュー テーブルに送信したレビューの数を SELECT および COUNT します。
- reviewVotes テーブルでユーザーが持っている賛成票の数を SELECT および COUNT します。
- GROUP BY ユーザー名 (両方のテーブルのキーです。ユーザー名は一意ですが、複数の行に存在します)。
- それらの COUNTs DESC の SUM によって結果セットを並べ替えます。(これは私が試行し続けているものですが、実行することさえできないため、現在 userReviewNum DESC で注文しています。)
- 結果セットを最初の 10 個に制限します。
結果セットには、レビューの数と賛成票の数 (+) で計算された上位 10 人のレビュアーが表示されます。
これが実行する私の最新の試みですが、userReviewNum * reviewVotesNumを掛けているように見えます。それらを追加する必要があります(ただし、SUMコマンドを含めようとする試みは非常に失敗しました-実際には、表示することさえ恥ずかしいほど悪いです私の試み)。
SELECT
reviews.username,
count(reviews.username) userReviewNum,
count(reviewVotes.username) reviewVotesNum
FROM reviews
LEFT JOIN reviewVotes ON reviews.username = reviewVotes.username
GROUP by reviews.username
ORDER BY userReviewNum DESC
LIMIT 0, 10
JOIN と UNION を使用してみましたが、どちらも機能しないようです。
誰でも提供できるヘルプは大歓迎です!
アップデート:
構造といくつかのサンプル データを次に示します。
レビュー テーブル (他にもフィールドがありますが、これらは重要なものです):
| | ユーザー名 | コメント | 評価 | 商品ID |
| | ふー | これはすごい!| | 5 | xxxx |
| | バー | これは好きじゃない | 1 | xxxx |
| | foo2 | 大丈夫です | 3 | xxxx |
| | ふー | bleh - 厄介な | 1 | xxxx |
reviewVotes テーブル (これよりも多くのフィールドがありますが、これらは重要なものです):
| | ユーザー名 | 投票者ユーザー名 | 商品ID |
| | ふー | foo2 | xxxx |
| | foo2 | ふー | xxxx | (ここでの簡単なアイデアは、あるユーザーが別のユーザーの投稿に賛成票を投じているということです)
そのため、ユーザーが Reviews テーブルで持っているレビューの数を数え、次に reviewVotes テーブルでユーザーが持っている賛成票の数を数え、それら 2 つの数の合計で並べ替える必要があります。
追加の更新: 上記の例では、期待される結果は次のとおりです。
ユーザー名 | # レビュー
ふー | 2
バー | 1
foo2 | 1
ユーザー名 | # 賛成票
ふー | 1
foo2 | 1
ユーザー名 | 累計
ふー | 3
バー | 1
foo2 | 2