このような状況に遭遇していないので、修正方法がわかりません。私はサブクエリが必要と推測していますか?ジョイントテーブルで合計とカウント
votes.vote
のSUMとvotes.vote
のCOUNTが必要です。これにより、選択した場所の評価(すべての投票の合計/投票の数=評価)を計算することができます。
は、それが簡単に理解できるようにする*および静的バインディングを使用してクエリです:
//prepare
$stmt = $db->prepare("
SELECT SQL_CALC_FOUND_ROWS
*,
COALESCE(SUM(votes.vote),0) AS vote_total,
COUNT(votes.vote) AS number_votes
FROM locations
LEFT JOIN tables
ON tables.location_id = locations.location_id
LEFT JOIN votes
ON votes.location_id = locations.location_id
LEFT JOIN events
ON events.location_id = locations.location_id
WHERE locations.location_id = :location_id
LIMIT :limit OFFSET :offset
");
//bindings
$binding = array(
'location_id' => 11,
'limit' => 20,
'offset' => 0
);
//execute
$stmt->execute($binding);
//results
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
この場所に接合された11件のイベントがあります。それには2つの票しか加わっていません(値は3、値は4)。
別に私はvotes
テーブルを削除参加し、SUM/COUNTは、彼らがする必要がありますように、すべての11件の結果が示され、それを選択した場合のみ結果はむしろ11より返却されていることから、
[vote_total] => 77 (should be 7, but is 7*11)
[number_votes] => 22 (should be 2, but is 2*11)
:私は、次のように取得しています。
Vote.voteのSUMとCOUNTの合計を何らかの方法で同じクエリで得ることは可能ですか、それともそれらの値を取得するために別のクエリが必要になるのでしょうか?
あなたの質問を編集し、サンプルデータと希望する結果を提供してください。あなたは明らかに混乱しています。なぜなら、あなたはGROUP BYを持たない集約クエリを持っており、それは1行を返すからです。それでも、あなたは 'LIMIT'節を使用しています。 –
グループは存在しないはずです...手元にある質問に関しては、サンプルのリターンが提供されました。はい、ページングが含まれているため、制限とオフセットが使用されています...この投稿のクエリはダンプされています。だから、私は私のポストで言ったように...それは可能ですか、別のクエリは、すべての結果の特定の列の合計/カウントを取得する必要があります。 – user756659