Я даже не знаю, как это искать.Не удается определить команду для извлечения данных из нескольких таблиц
У меня есть база данных Я пытаюсь извлечь данные из 4 таблиц.
Сначала я получаю список категорий из таблицы animal_list.
Затем я использую цикл while, чтобы вытащить животных из таблицы животных, которые соответствуют категории.
Это хорошо работает. Он отображает все данные о животных, разбитые на три категории.
Теперь я пытаюсь получить атрибуты животных из 2 других баз данных. Поэтому мне нужно, чтобы он взял animal_id и выполнил поиск в таблице skill_per_char, где он найдет идентификатор навыка, связанный с animal_id и skill_id, затем ему нужно выполнить поиск по таблице навыков и вытащить имя для навыка, соответствующего идентификатору.
Я пробовал использовать отдельные вызовы SQL, но он не отображает каждое умение для каждого животного только первого, и это даст ошибку для всего остального, у которого не было навыка. Поэтому я попытался добавить в другой цикл, где я хочу, чтобы данные появлялись, и это не покажет навык для животных с навыками, а затем даст ошибки для всего остального. Поэтому я попробовал цикл for, для каждого поиска животных навыков и отображения их, которые просто пошатнулись, и я установил сообщение об ошибках по электронной почте. В итоге у меня было 3500 ошибок. Это продолжалось, поэтому мне пришлось убить процесс.
Я много делал с подобными вещами, и это нормально работает, но на этот раз у некоторых животных есть более одного навыка, поэтому я должен сделать цикл while для них, но я просто не могу его достать Работа.
Благодаря
[[[[EDIT]]]]
Я исправил эту проблему. Возможно, это не правильный способ сделать это, но он работает.
Вот что я сделал:
$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 значений.
В любом случае это работает, спасибо всем.
Покажите нам Схемы. – Mihai
Если вы предоставляете структуры таблиц в читаемом формате с результатом, которого хотите достичь, было бы намного лучше. –
Посмотрите на команды SQL JOIN и INNER JOIN и RIGHT JOIN и LEFT JOIN –