从两个不同的表中获取信息,协助

时间:2015-08-13 19:44:27

标签: php mysql

我正在尝试制作会员页面。对于排名,它显示数字,所以我创建了另一个具有排名id(1,2,3等)的表,并为其添加了一个名称。 这是我的代码。

<?php 
$getCoB = mysql_query("SELECT * FROM `members` 
                       WHERE `CoB` = '1' && `user_state` = '1' ORDER BY `id`");
$id = ($getCoB['rank']);
$rankInfo = mysql_query("SELECT * FROM `ranks` WHERE `id` = '".$id."'");?>

<h2 class="title">Council of Balance members</h2>
<style>tr:nth-of-type(odd) { background-color:#F0F0F0;}</style>
<div style='padding:5px;'>
<?php               
if(mysql_num_rows($getCoB) == 0)
{
    echo "There are no Council of Balance members.";
} else {
    echo "<table cellpadding=20 width=100%>";
    while($row = mysql_fetch_assoc($getCoB))
    {
        echo "<tr><td style='background-color:transparent;'><b>". $row['name'] 
         . "</b></td><td>Rank: ".$rankInfo['name']." <br/> Role: ". $row['role']."</td>";
    }
    echo "</table>";
}
?>

问题是rankInfo['name']没有出现。我尝试在这一行while($row = mysql_fetch_assoc($getCoB))上做了一些事情并尝试将其设为while($row = mysql_fetch_assoc($getCoB)) || while($rank = mysql_fetch_assoc($rankInfo),并将此部分<td>Rank: ". $rankInfo['name'] . "更改为此<td>Rank: ". $rank['name'] . ",但最终出现了错误。如果我保持原样,只显示 Rank:,而不会将我添加到我的数据库中的名称。

1 个答案:

答案 0 :(得分:1)

您可以使用内部联接将两个查询合并为一个。

<?php
$getCoB = mysql_query("SELECT m.name as member_name, m.role, r.name as rank_name 
                       FROM `members` as m INNER JOIN `ranks` as r ON m.rank = r.id 
                       WHERE `CoB` = '1' && `user_state` = '1' ORDER BY m.id");
?>

由于INNER JOIN的工作原理,这只会显示在排名表中有相应记录的成员。如果有一些成员要显示没有等级记录,请改用LEFT JOIN。

然后,当您回显数据时,请务必每次都参考您提取的项目($row)。在您的代码中,您指的是$rankInfo['name'],其中$rankInfo不是变量,而是指从中未提取任何行的mysql查询。

while($row = mysql_fetch_assoc($getCoB)) {
    echo "<tr><td style='background-color:transparent;'><b>". $row['member_name']
    . "</b></td><td>Rank: ". $row['rank_name'] . " <br/> Role: " . $row['role'] . "</td>";
}