2

次のフィールドを持つテーブルがあります。

row_id    
first_field
second_field

row_idは整数型で、自動インクリメントに設定され、主キーです。他の2つのフィールドはテキストタイプです。

テーブルには最大5行が入力されます。そのため、row_idの値は1、2、3、4、および5です。

私はまた、私の最初のテーブルと1対多の対応を持つ同様の構造の別のテーブルを持っています。

選択クエリを実行して結果をmysql_fetch_arrayにフィードすると、奇妙なことが起こります。

私がこれを実行するとき:

$query = "select a.*, b.* from table1 as a
         left join table2 as b on a.row_id = b.row_id";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
    echo '<pre>'; print_r($row); echo '</pre>';
}

私はこれを手に入れます:

Array
(
    [0] => 1
    [row_id] => 1
    [1] => some text
    [first_field] => some text
    [2] => some text
    [second_field] => some text 
}


Array
(
    [0] => 2
    [row_id] => 2
    [1] => some text
    [first_field] => some text
    [2] => some text
    [second_field] => some text 
}


Array
(
    [0] => 3
    [row_id] => 
    [1] => some text
    [first_field] => some text
    [2] => some text
    [second_field] => some text 
}


Array
(
    [0] => 4
    [row_id] => 
    [1] => some text
    [first_field] => some text
    [2] => some text
    [second_field] => some text 
}


Array
(
    [0] => 5
    [row_id] => 
    [1] => some text
    [first_field] => some text
    [2] => some text
    [second_field] => some text 
}

各配列の結果で、最初のフィールドrow_idに注意を向けたいと思います。最初の2つの配列では、インデックス0とrow_idの値は同じですが、後続の3つの配列では、インデックス0のみに値があります。row_idはnullのようです。

このようなものに出会ったのはこれが初めてです。これを引き起こしているのは何ですか?どうすればこれを修正できますか?

ありがとう!

4

1 に答える 1

1

これはLEFT JOIN、クエリで他のテーブルを編集したという事実に関連しています。

を使用するLEFT JOINと、2番目のテーブルに一致する行がない最初のテーブルの行には、JOINedフィールドにNULL値が入力されます。

両方のテーブルで呼び出された列がありrow_id、両方のテーブルから選択*したため、後の値row_idは結果の前の値を上書きします。table2の行3、4、および5に一致する行がないように見えtable1ます。これにより、NULLが発生しますrow_id

解決策は、必要なものを選択するrow_idことです。これを行うには、いくつかの方法があります。しかし、このような比較的単純な結果のセットでは、必要なすべての列を明示的に指定することをお勧めします。

SELECT a.*, b.col_1, b.col_2
FROM table1 a
LEFT JOIN table2 b ON a.row_id = b.row_id

または、結合からを削除するLEFTと、行3、4、および5が結果から省略されます。

于 2012-04-05T15:38:44.603 に答える