0

私は何人かの友人のためにゴルフスコア追跡データベースを作成していますが、結果から特定の値を取得するための最良の方法に問題があります。

私はテーブルを持っています:

Players - stores player info
Hole - stores basic info about a hole (CourseID, HoleNum, Par...)
Score - stores each hole they played (HoleID, NumStrokes...)

私の目標は、各穴(1〜18)の結果を示す表を出力することです。次のクエリは、彼らがプレイしたすべてのホールと、ホールを完了するのにかかったストローク数のリストを取得します。

SELECT Hole.HoleID, NumStrokes
FROM Players
INNER JOIN Score ON Score.PlayerID = Players.PlayerID
INNER JOIN Hole ON Score.HoleID = Hole.HoleID
WHERE Players.PlayerID = '$PlayerID'

このような結果:

HoleID      NumStrokes
1           4
1           6
1           3
2           5
7           3

次を追加して、出力するホールごとに1つずつ、18の異なるクエリを実行する必要がありますか?

AND Hole.HoleID = '$HoleID'

私のクエリに、または私が使用できるより良いSQLクエリはありますか?ホールテーブルはラウンド識別子としても機能するため、必要なHoleIDのNumStrokesを決定する必要はありません。ちなみに、私はPHPを使用しています。うまくいけば、私の質問は十分に明確でした。

ありがとうございました!

4

1 に答える 1

1
$conn = new mysqli('host','user','pass','db_name');

$PlayerID = (int) $_GET['PlayerID'];

$rs = $conn->query("
    SELECT Hole.HoleID, NumStrokes
    FROM Players
    INNER JOIN Score ON Score.PlayerID = Players.PlayerID
    INNER JOIN Hole ON Score.HoleID = Hole.HoleID
    WHERE Players.PlayerID = $PlayerID
") or die($conn->error);
while($row = $rs->fetch_object()) {
    echo $row->HoleID.' - '.$row->NumStrokes.'<br/>';
}

これにより、プレーヤーの結果が出力されます。mysql_ *関数でも同じことができますが、非推奨であるため、mysqliまたはPDOを使用する方が適切です。

于 2012-07-24T21:40:07.040 に答える