0

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

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

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

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

这很好用。它显示分为三个类别的所有动物数据。

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

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

我在这类事情上做了很多,而且它通常可以工作,但是这次有些动物拥有不止一种技能,所以我必须为它们做一个 while 循环,但我就是无法让它发挥作用。

谢谢

[[[[编辑]]]]

我解决了这个问题。这可能不是正确的方法,但它确实有效。

这是我所做的:

$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 个值。

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

4

2 回答 2

0

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

于 2013-08-27T16:43:31.683 回答
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;
于 2013-08-27T18:10:52.217 回答