2

我正在尝试从游戏服务器数据库中提取一些统计数据,并将它们返回到一个表中。

我已经设法做到了第一点 - 拉出 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,它不起作用:(

有什么想法,或者上面的内容太糟糕了,我应该放弃吗?

4

4 回答 4

2

我相信您的查询中有一个拼写错误,它会在此处提取每个玩家的信息:

mysql_query("SELECT * FROM `survivor` WHERE `unique_id` ='.$unique' AND     `is_dead` = 0")

具体来说,在 value 字段unique_id = '.$unique'中有 extra 的部分。.

尝试删除它以获得以下信息:

$result = mysql_query("SELECT * FROM `survivor` WHERE `unique_id`='$unique' AND `is_dead` = 0") or die(mysql_error());

当然,这是假设您没有在表中的.每个unique_id值前面加上 a 。survivor

旁注(未具体回答):
如果您要更新代码以使用MySQLiPDO库而不是不推荐使用的mysql_函数,您将能够使用准备好的语句。使用这些可以防止像上面提到的那样的小错误,并提供更安全的代码。

于 2012-12-28T13:35:32.600 回答
0

我不了解 MySQL,因为我一直使用 MSSQL,但这是我用 PHP 和 mssql 编写它的方式:

'SELECT * FROM survivor WHERE unique_id="'.$unique.'" AND is_dead = 0'

试试看,让我知道;)

于 2012-12-28T14:35:00.127 回答
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. profile如果您将其更改为 JOIN(即删除 LEFT),它将只为您提供AND中存在匹配项的行survivor

几个建议:

  1. 明确说明您想要哪些列,即“SELECT name、human、survival_time 等...”而不是 SELECT *。
  2. 使用允许您使用准备好的语句的查询方法,例如 PDO。
  3. 使用单引号而不是双引号,这样您就不必转义 HTML 输出中的所有双引号。任何阅读您的代码的人都会感谢您!
于 2012-12-28T14:43:16.027 回答
0

嵌套你的while循环或阅读 mysql LEFT JOIN 并更新你的查询。

于 2012-12-28T13:32:26.570 回答