2

一緒にプレーする人のために、ゴルフに関する統計ページを作成しています。すべてのスコアカードからバーディーを獲得した回数 (-1 アンダーパー) をデータベースから抽出しようとしています。ホールごとに -1 を引き出しますが、スコアカードに 2 つのバーディーがあった場合でも、2 つではなく 1 つのバーディーとしてカウントされることに気付きました。合計9個追加されました。

$query_p321 = "SELECT t1.*,COUNT(t1.player_id),t2.* FROM scorecards t1 LEFT JOIN courses t2 ON t1.course_id=t2.course_id 
WHERE t1.hole1<t2.hole1_par AND t1.hole1>t2.hole1_par-2
     OR t1.hole2<t2.hole2_par AND t1.hole2>t2.hole2_par-2
     OR t1.hole3<t2.hole3_par AND t1.hole3>t2.hole3_par-2
     OR t1.hole4<t2.hole4_par AND t1.hole4>t2.hole4_par-2
     OR t1.hole5<t2.hole5_par AND t1.hole5>t2.hole5_par-2
     OR t1.hole6<t2.hole6_par AND t1.hole6>t2.hole6_par-2
     OR t1.hole7<t2.hole7_par AND t1.hole7>t2.hole7_par-2
     OR t1.hole8<t2.hole8_par AND t1.hole8>t2.hole8_par-2
     OR t1.hole9<t2.hole9_par AND t1.hole9>t2.hole9_par-2
     OR t1.hole10<t2.hole10_par AND t1.hole10>t2.hole10_par-2
     OR t1.hole11<t2.hole11_par AND t1.hole11>t2.hole11_par-2
     OR t1.hole12<t2.hole12_par AND t1.hole12>t2.hole12_par-2
     OR t1.hole13<t2.hole13_par AND t1.hole13>t2.hole13_par-2
     OR t1.hole14<t2.hole14_par AND t1.hole14>t2.hole14_par-2
     OR t1.hole15<t2.hole15_par AND t1.hole15>t2.hole15_par-2
     OR t1.hole16<t2.hole16_par AND t1.hole16>t2.hole16_par-2
     OR t1.hole17<t2.hole17_par AND t1.hole17>t2.hole17_par-2
     OR t1.hole18<t2.hole18_par AND t1.hole18>t2.hole18_par-2
GROUP BY t1.player_id ORDER BY count(t1.player_id) DESC";
$result_p321 = mysql_query($query_p321);
$number = 1;
while ($row_p321 = mysql_fetch_array($result_p321)) {
    $player_id2 = $row_p321["player_id"];
    } 
and so on..

そこに「-2」があることに気付くでしょう。その人が 2 打以下であるかどうかを記録したくないので、これはパー マイナス 2 を取っています。わずか一打差。どんな助けでも大歓迎です。ありがとうございました。ああ、また、プレイヤー名を複数回リストしたくないので、GROUP BY を使用する必要があります。すべてのバーディーをカウントしたいだけです。私の大きな問題は、行ごとに1つ以上数えないことだと思います。ありがとう。

4

2 に答える 2

1

問題はwhere節です。selectそれらをカウントするには、句で比較を行う必要があります。

SELECT t1.*,
       sum((t1.hole1 = t2.hole1_par - 1) +
           (t1.hole2 = t2.hole2_par - 1) +
           . . .
           (t1.hole18 = t2.hole18_par - 1)
          ) as birdies
FROM scorecards t1 LEFT JOIN
     courses t2 ON t1.course_id=t2.course_id
GROUP BY t1.player_id
ORDER BY birdies DESC

これは、true が 1 で false が 0 であるという MySQL の規則を使用して、数値を加算します。標準 SQL を使用した別の定式化は次のとおりです。

       sum((case when t1.hole1 = t2.hole1_par - 1) then 1 else 0 end) +
于 2013-03-29T21:44:20.697 に答える
0

そのようなことを試してください:

SELECT t1.*, SUM( IF(t1.hole1 = t2.hole1_par-1,1,0) +
        IF(t1.hole2 = t2.hole2_par-1,1,0) +
        IF(t1.hole3 = t2.hole3_par-1,1,0) +
        IF(t1.hole4 = t2.hole4_par-1,1,0) +
       -- etc.
        IF(t1.hole18 = t2.hole18_par-1,1,0) ) AS birdies
FROM scorecards t1
LEFT JOIN courses t2 ON t1.course_id=t2.course_id
GROUP BY t1.player_id
ORDER BY birdies DESC
于 2013-03-29T21:42:48.740 に答える