0

私はこのような3つのテーブルを持っています:

表1:

id|name with row 1: [1|alex] and row2: [2|jane]

表2

nameid|classid with row 1: [1|2] and row2: [1|1] and row3: [2|2]

表3

classid|classname with row 1: [1|A] and row2: [2|B]

表1のIDを取得し、それを表2と比較してクラスIDを取得し、次にそれらを表3と比較してクラス名を取得します。私は表1のIDを持っており、これを行います。

<?php
$result = mysql_query("SELECT * FROM table2 WHERE nameid='$id'") or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
    $classid = $row['classid'];
    //Get the class id to compare with table3
    $result = mysql_query("SELECT * FROM table3 WHERE classid='$classid'") or die(mysql_error());

    while($row = mysql_fetch_array($result)) {
        echo $row['classname'];
       //Write down the class name
    }       
}   
?>

ただし、表2には、同じである2つの行(1と2)nameid = 1がありますが、コードは1つのクラス名しか出力しません。

4

1 に答える 1

3

あなたは再利用$rowしていて、$resultそれがあなたの問題を引き起こしています。

$result = mysql_query("SELECT * FROM table2 WHERE nameid='$id'") or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
    $classid = $row['classid'];

    $result2 = mysql_query("SELECT * FROM table3 WHERE classid='$classid'")or die(mysql_error());
    while($row2 = mysql_fetch_array($result2)){
        echo $row2['classname'];

}

}

ただし、これは結合を使用した1つのクエリで取得できます。

select table3.classname from table2 left join table3 on table3.classid = table2.classid where table2.nameid='$id'

また、これをスローする必要があります。そうしないと、他の誰かがmysqliまたはpdoを使用する必要があるmysql_*関数を使用しなくなります。

于 2013-03-07T19:54:32.943 に答える