0

これはどうやって探してもわかりません。

4 つのテーブルからデータを取得しようとしているデータベースがあります。

まず、animal_list テーブルからカテゴリのリストを取得します。

次に while ループを使用して、カテゴリに一致する動物を動物テーブルから取り出します。

それはうまくいきます。すべての動物データが 3 つのカテゴリに分類されて表示されます。

現在、他の 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