我需要从 MySQL 表中获取一个值,然后将其替换为其他值。
我有一个查找和替换表,其中包含三列:ID、查找、替换。我想循环遍历该表的每一行,然后在另一个表中搜索查找值并将其更改为替换。
例如:
ID | Find | Replace
1 | This is a product name | Product Name
我创建了一个循环来遍历每一行,然后在另一个循环内部循环遍历我要替换其中值的表:
$lookups = mysqli_query($connect, "SELECT * FROM value_lookup");
while($row = mysqli_fetch_assoc($lookups)) {
$find = $row['Find'];
$replace = $row['Replace'];
$table = mysqli_query($connect, "SELECT ID, Reference FROM table");
while($row = mysqli_fetch_assoc($table)) {
$ref = $row['Reference'];
$newRef = str_ireplace($find, $replace, $ref);
echo $newRef . PHP_EOL;
mysqli_query($connect, "UPDATE table SET Reference = '$newRef' WHERE Reference LIKE '%$find%'");
}
}
在我看来,str_ireplace 不起作用,因为我使用的值是关联数组。如果我手动输入字符串形式的值,它就可以正常工作。
我需要知道如何获取字符串形式的值,或将它们转换为一。我也必须使用 str_ireplace,我不能直接获取查找值并更改为替换。由于某些值具有不同的前缀和后缀,我希望保持相同:
These are some towels: Red TO Towels: Red
These are some towels: Blue TO Towels: Blue
最佳答案
在为 mickmackusa 制作 SQLfiddle 时,我实际上已经成功地使用纯 SQL 为自己解决了这个问题。
DELIMITER //
CREATE PROCEDURE findreplace()
BEGIN
DECLARE cnt INT DEFAULT 0;
DECLARE total INT DEFAULT 0;
DECLARE original VARCHAR(255);
DECLARE new VARCHAR(255);
SELECT COUNT(*) FROM lookup INTO total;
WHILE cnt < total DO
SELECT find FROM lookup LIMIT cnt, 1 INTO original;
SELECT repl FROM lookup LIMIT cnt, 1 INTO new;
UPDATE test SET Reference = replace(Reference, original, new);
SET cnt = cnt + 1;
END WHILE;
END//
关于PHP str_ireplace 在 Mysql 结果上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866909/