我试图从游戏服务器数据库中提取一些统计数据,然后将它们返回到表格中。
我已经设法做了第一点 - 拉出10个结果,在html的表格中显示,但是......接下来的一点让我难过......我为每个玩家想要从另一张桌子获得一些信息。 ..
到目前为止,这就是我所拥有的...原谅凌乱的代码,我只是在学习!
// adding ALL info from the first 10 tables 'profile' based on humanity, ascending, to the variable 'profile_info'
$profile_info = mysql_query("SELECT * FROM profile ORDER BY humanity desc LIMIT 10");
while($row = mysql_fetch_array($profile_info))
{
// Below I add the players unique ID into the variable $unique, to be used later for pulling their survival time from the 2nd table, which is called 'survivor'
$unique = $row['unique_id'];
echo "<tr>";
echo "<td class=\"c1\">" . $row['name'] . "</td>";
echo "<td class=\"c2\">" . $row['humanity'] . "</td>";
echo "<td class=\"c3\">" . $row['total_survivor_kills'] . "</td>";
echo "<td class=\"c4\">" . $row['total_bandit_kills'] . "</td>";
echo "<td class=\"c5\">" . $row['total_zombie_kills'] . "</td>";
echo "<td class=\"c6\">" . $unique . "</td>";
//In the line below, I try to get data from the 2nd table (called survivor), checking for the unique_id for the player (extracted from the first table, called 'profile') which is common across both tables and which have a 0 in the field 'is_dead'
$result = mysql_query("SELECT * FROM `survivor` WHERE `unique_id` ='.$unique' AND `is_dead` = 0") or die(mysql_error());
echo $unique;
if (mysql_num_rows($result)) {
$survivors_survival_time = mysql_fetch_assoc($result);
echo "<td class=\"c7\">" . $survivors_survival_time['survival_time'] . "</td>";
}
我希望,即使上面的代码可能是垃圾,你也能看到我想要做的事情?
大多数工作正常,只是我试图从第二个表中获取玩家信息的部分,基于第一个表中行的unique_id,它不起作用:(< / p>
任何想法,或者上面那么糟糕我应该放弃?
答案 0 :(得分:2)
我相信你的查询中有一个拼写错误,在这里为每个玩家提取信息:
mysql_query("SELECT * FROM `survivor` WHERE `unique_id` ='.$unique' AND `is_dead` = 0")
具体而言,unique_id = '.$unique'
部分,其中值字段中有额外的.
。
尝试删除它以获取以下内容:
$result = mysql_query("SELECT * FROM `survivor` WHERE `unique_id`='$unique' AND `is_dead` = 0") or die(mysql_error());
当然,这是假设您没有为.
表中的每个unique_id
值添加survivor
。
旁注(不具体回答):
如果您要更新代码以使用与已弃用的mysql_
函数相对的MySQLi或PDO库,则可以使用预准备语句。使用这些可以防止像上面提到的那样的小错误,也可以提供更安全的代码。
答案 1 :(得分:0)
嵌套while
循环或阅读有关mysql LEFT JOIN的内容并更新您的查询。
答案 2 :(得分:0)
我不知道MySQL,因为我一直使用MSSQL,但这是我用PHP和mssql编写它的方式:
'SELECT * FROM survivor WHERE unique_id="'.$unique.'" AND is_dead = 0'
尝试并让我知道;)
答案 3 :(得分:0)
您可以使用联接来组合这些查询:
SELECT
*
FROM
profile AS p
LEFT JOIN
survivor AS s ON p.unique_id = s.unique_id
WHERE
s.is_dead = 0
ORDER BY
humanity DESC
LIMIT
10
然后简单地循环结果。使用LEFT JOIN可以获得profile
的所有结果以及survivor
中的所有匹配项。如果您将其更改为JOIN(即放下LEFT),它将仅为您提供profile
和survivor
中存在匹配的行。
一些建议: