1

こんにちは、私はゲーム トロフィー システムを作成しており、まだ pdo を学習しています。データベースに 2 つのテーブルがあります

最初のテーブル (ゲーム) 構造は

id, title, thumb, bronze, silver, gold, platinum

セカンドテーブル(トロフィー)の構造は

id, title, game_id

( game_id ) 列によってゲームに割り当てられたすべてのトロフィー

次のようにゲームをリストしたい

ゲーム名

獲得トロフィーx合計

使用しているクエリは、トロフィーの合計を取得するだけです。トロフィー テーブルからゲームのトロフィー データを取得する方法がわかりません。

これは私のクエリコードです

$stmt = $db->query('SELECT * FROM trophies ORDER BY id DESC');
$numcat = $stmt->rowCount();
if($numcat == 0)
{
    echo "There's No Trophies To Show";
}
else
{
    foreach($db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games GROUP BY id DESC") as $row)
    {
        echo "
        <div class='game_row'>
            <div class='thumb_box'><img src='../images/thumbs/$row[thumb]' width='87' height='48' alt='$row[title]' /></div>
            <div class='info_box'>
                <span class='game_name'><a href='trophies.php?action=edit&game_id=$row[id]'>$row[title]</a></span><br />
                <span class='game_trophy'>0 Of $row[total] Trophies</span>
            </div>
        </div>";
    }
}

join を使用しようとしましたが、何かが足りないと確信しています

結合を使用した私のクエリ

foreach($db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC") as $row)

私が得たエラー

警告: 同じ行で foreach() に無効な引数が指定されました

4

3 に答える 3

4

あなたはそれをする必要があります:

$sqlres=$db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC");
while($row=$sqlres->fetch_assoc())
{
    echo $row["thumb"];
}

SQL では、結合を行うときに、フィールドのテーブルを指定する必要があります。

SELECT g.thumb, g.title, g.id, SUM(t.bronze + t.silver + t.gold + platinum) AS total FROM games g JOIN trophies t ON g.id = t.game_id GROUP BY g.id DESC
于 2013-06-15T09:36:00.847 に答える
2

これを試して:

$rows = $db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC");

foreach($rows as $r){
   echo $r->thumb //etc.
}

タイトルの sql エラーは、同じフィールド名を持つ 2 つのテーブルがあるためです。games.title、trophies.bronze などのように、標準の結合で重複するフィールドを指定する必要があります (すべてに対して行うのが良い方法ですが、同じフィールドを持つテーブルでのみ必要です。したがって、あいまいなフィールド エラー. - わかっています.MySQL はより良いエラーを表示する必要があります.残念なことに、Oracle がそれらを買収し、それに焦点を当てていません.

次に、クエリ結果を返した後、SQL クエリで foreach ループを実行して、それを使用して結果行を反復処理できるようにします。

于 2013-06-15T09:34:46.703 に答える
1

おそらくフィールドIDがあいまいです クエリを変更してください

SELECT games.thumb, games.title, games.id, SUM(games.bronze + games.silver + games.gold + games.platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY games.id DESC"
于 2013-06-15T09:37:59.547 に答える