1

你好我正在创建游戏奖杯系统,我还在学习 pdo。我的数据库中有两个表

第一桌(游戏)结构是

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 错误是因为您有两个具有相同字段名称的表。您必须在标准连接中指定重复字段,如下所示: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 回答