显示来自MySQL的信息 - 来自2个不同的表......唉! Noob陷入困境

时间:2012-12-28 13:29:00

标签: php mysql html-table echo

我试图从游戏服务器数据库中提取一些统计数据,然后将它们返回到表格中。

我已经设法做了第一点 - 拉出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>

任何想法,或者上面那么糟糕我应该放弃?

4 个答案:

答案 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_函数相对的MySQLiPDO库,则可以使用预准备语句。使用这些可以防止像上面提到的那样的小错误,也可以提供更安全的代码。

答案 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),它将仅为您提供profilesurvivor中存在匹配的行。

一些建议:

  1. 明确说明您想要的列,即“SELECT name,humanity,survival_time等...”而不是SELECT *。
  2. 使用允许您使用预准备语句的查询方法,例如PDO。
  3. 使用单引号而不是双精度,这样您就不必转义HTML输出中的所有双精度数。任何阅读你代码的人都会感谢你!