• 締切済み

プログラムが上手く動きません

初心者です。 すみません、煮詰まっています。 重複するレコードを持つlistAとlistBがあり、listAのレコードを同じ内容のlistBのレコードに1対1で紐付け用と思っています。 listAとlistBが多対位1にならないように、listAとlistBがマッチした時点でlistBのレコードにflagを立ててflagが立っているレコードには当たらないようにしたつもりなのですが、listBのレコードがflag=1になっているにもかかわらず、複数のlistAがlistB1レコードに紐付いてしまいます。 ソースは以下の通りです。 foreach($listA as $la){ if($la['flag'] != 1){ foreach($ilstB as $lb){ if($lb['flag'] != 1){ if($la['num'] = $lb['num']){ $AAA[] = $lb; $sql = "UPDATE listB SET flag = 1 WHERE num = " . $lb['num']; $result = $conn->query($sql); } } } } } 何かいけないのでしょうか?

みんなの回答

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 行いたいことはよくわかっていませんが、 if ( $la['num'] = $lb['num'} ) { は転記ミスでしょうか? if ( $la['num'] === $lb['num'] ) { とするべきです。 レコード取得のロジックや前後がどういった処理を行なっているかわからないのでなんともいえませんが、 DBに対してupdateを実行しても、取得し直さないとflagの状態は変わってませんのでご注意下さい。

bacchus047
質問者

補足

すみません、 if ( $la['num'] === $lb['num'] ) { です。 残念ながら自分のプログラムでは===になっています。

すると、全ての回答が全文表示されます。

関連するQ&A