无法确定从多个表中提取数据的命令

时间:2013-08-27 16:38:06

标签: mysql

我甚至不知道如何搜索这个。

我有一个数据库我试图从4个表中提取数据。

首先,我从animal_list表中获取类别列表。

然后我使用while循环从动物表中拉出与该类别匹配的动物。

工作正常。它显示分为三类的所有动物数据。

现在我正试图从其他2个数据库中获取动物属性。所以我需要它来获取animal_id并搜索skill_per_char表,在那里它会找到与animal_id和skill_id相关联的技能ID,然后需要搜索技能表并提取与id匹配的技能的名称。

我尝试使用单独的SQL调用,但它不会显示每个动物的每个技能只是第一个,并且它会给其他所有没有技能的错误。所以我尝试添加另一个while循环,我希望数据出现,并且它不会显示具有技能的动物的技能,然后会给其他一切带来错误。所以我尝试了一个for循环,为每个动物搜索技能并显示它们,这只是疯了,我已经设置错误报告给电子邮件。我最终得到了3500个错误。它还在继续,所以我不得不杀死这个过程。

我已经做了很多这样的事情,它通常有效,但这次有些动物有不止一种技能,所以我必须为那些做一些循环,但我无法让它工作

由于

[[[[编辑]]]]

我解决了这个问题。它可能不是正确的方法,但它的工作原理。

这是我做的:

$g = "SELECT * FROM animal_list";
$r = mysqli_query($dbc, $g) or trigger_error("Query: $g\n<br />MySQL Error: " . mysqli_error($dbc));

while ($ani = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

$b = "SELECT * FROM animal WHERE group_id = {$ani['group_id']}";
$B = mysqli_query($dbc, $b) or trigger_error("Query: $b\n<br />MySQL Error: " . mysqli_error($dbc));


echo '<div style="float: left; padding: 20px;">

<table width="800" border="1" cellspacing="2" cellpadding="2" align="center">';
echo '<tr><td colspan="13" align="center"><b>' . $ani['group'] . '</b></td></tr>';
echo '<tr>
            <td align="left"><b>Name:</b></td>
            <td align="left"><b>Skills:</b></td>
            </tr>';
    while ($animal = mysqli_fetch_array($B, MYSQLI_ASSOC)) {
    echo '<tr>
            <td align="left">' . $animal['name'] .'</td>
            <td align="left">';

            $a = "SELECT skill_id FROM skill_per_char WHERE char_id = {$animal['animal_id']}";
            $A = mysqli_query($dbc, $a) or trigger_error("Query: $a\n<br />MySQL Error: " . mysqli_error($dbc));

            if (mysqli_num_rows($A) > 0) {
                while ($aniskill = mysqli_fetch_array($A)) {

                $k = "SELECT name FROM skills WHERE skill_id = {$aniskill['skill_id']}";
            $K = mysqli_query($dbc, $k) or trigger_error("Query: $k\n<br />MySQL Error: " . mysqli_error($dbc));

            $askill = mysqli_fetch_array($K);

                echo '' . $askill['name'] . ' ';    
                }
            }
            echo '</td>
            </tr>';
}
    echo '</table></div>';
}

我知道表格不好,但这适用于我的输出。我删除了其他字段数据。动物数据库中总共有12个值。

无论如何,这都有效,谢谢大家。

2 个答案:

答案 0 :(得分:0)

你可能在sql中寻找JOINS。有很多可用的连接教程。继续学习。 MySQL支持内部,左侧,右侧和交叉连接。

答案 1 :(得分:0)

听起来像select语句给你的东西看起来像这样:

SELECT  a.animal_name, s.skill_name

FROM    animals AS a

        JOIN skill_per_char AS spc ON a.animal_id = spc.char_id
        JOIN skills AS s ON spc.skill_id = s.skill_id

ORDER BY a.animal_name, s.skill_name;