0

私は、mysql フィールドで見つかった最初の 12 桁の数字を preg_match_all し、その数字を別のフィールドに挿入して、Select ステートメントからのすべての結果をループしようとしています。すべてのフィールドで見つかった最初の結果のみを配置する次のものがあるため、すべての field3 に同じ 12 桁の数字が挿入されます。その 12 桁の数字は、Select ステートメントで見つかった最小の一意の ID フィールドからのものです。これについての助けをいただければ幸いです。

<?php


$query = mysql_query("SELECT * FROM `dbase`.`table` WHERE field1 IS NOT NULL AND field3 IS NULL");
$regexp ='/[0-9]{12}/';

while ($row = mysql_fetch_assoc($query)){
$result=($row["field1"]);

preg_match_all($regexp,$result,$matches,PREG_PATTERN_ORDER);

foreach($matches[0] as $match => $where){
$id=($row["field2"]);
$sql="UPDATE `dbase `.`table ` set field3 = $where WHERE field2 = '$id'";

mysql_query($sql);
}
}
?>

追加した

print_r( $matches );

出力は 1 つの結果を持つ配列で、数値はすべてのフィールドに配置されます。

配列 ( [0] => 配列 ( [0] => 290970571788 )

)

中かっこの変更により、print_r の出力が次の形式で 12 桁の数字のリストを表示するように修正されました (最初の 2 つだけが表示されます): Array ( [0] => Array ( [0] => 151104658286 )

) 配列 ( [0] => 配列 ( [0] => 271249191324 )

) ありがとうございます。

ここに記載されている回答と提案を利用して、コードを編集して最終的な作業バージョンを表示しました。最後の大きな問題は、2 番目の select ステートメントで配列の結果を使用し、適切にループして各値を適切な行に挿入することでした。また、最初の select ステートメントをクリーンアップし、preg_set_order から preg_pattern_order に変更しました。

4

1 に答える 1

2

そんなはずない

{while ($row = mysql_fetch_assoc($query))

}

しかし

while ($row = mysql_fetch_assoc($query)) {

}

ステートメントでコード ブロックを作成したくないがwhile、コード ブロックを提供したい。

また、同じWHERE条件を使用しSELECTUPDATEいるため、選択したすべての行が同じ値で更新されます (すべてがその条件に一致します)。

于 2013-09-03T12:18:11.233 に答える