私は、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 に変更しました。