我甚至不知道如何搜索这个。
我有一个数据库我试图从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个值。
无论如何,这都有效,谢谢大家。答案 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;