我正在尝试为数据库中存在的每一行分配一个名为"uniqueid"的字段。大约有 188,000 行可用。
这是我正在使用的代码:
$connection = mysql_connect("localhost","root","root");
mysql_select_db("comics",$connection) or die ("Database not found");
$query = mysql_query("select * from comic_issues");
if ($query){
$rows = mysql_num_rows($query);
foreach($rows as $row){
$str = strtolower($row['series'].$row['volume'].$row['issue']);
$str = preg_replace('/[^A-Za-z0-9]/', '', $str);
$update = "update comic_issues set uniqueid='" . $str . "' where id='" . $row['ID'] . "'";
mysql_query($update);
exit();
}
}
正在发生的事情是,每一行都使用相同的 uniqueid 进行更新,每次我运行脚本时,这似乎都是一个不同的值。
而不是
foreach($rows as $row){
你需要做
while ($row = mysql_fetch_row($query)) {
在你的代码中,$rows
是一个数字而不是一个数组,因此你不能对它做一个foreach。
让MySQL为您完成所有工作:
UPDATE comic_issues SET uniqueid = LOWER(CONCAT(series,volume,issue))
如果还必须去除所有非字母数字字符,则可以编写存储函数或使用 UDF。