Заменить случайное слово на mysqli - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу заменить случайное слово в WordPress. У меня есть код для Mysql.этот код работает хорошо:

update wp_posts set post_content =
replace(post_content,'oldword','newword'); 

, но когда я хочу заменить случайное в базе данных, как

replace(post_content,'oldword',rand('newword','google','stackoverflow','stackover')); 

, этот код не работает.

Я не знаю, как использовать этот коддля случайной замены слова. я хочу, чтобы каждое вхождение oldword заменялось другим словом

tank u для вашей помощи, когда я хочу использовать post_content, я вижу проблему

 Error

SQL query:

UPDATE wp_posts SET post_content =
REPLACE_RANDOM(post_content, 'oldword')

MySQL said: Documentation 

 #1366 - Incorrect string value: '\xD8\xA7\xDB\x8C\xD9\x86...' for column 'String' at row 1

iиспользовать этот код, где есть пробламе?танк ты снова `

    DELIMITER $$
DROP FUNCTION IF EXISTS Replace_Random$$
CREATE FUNCTION Replace_Random(String TEXT, Word TEXT)
RETURNS TEXT
BEGIN
DECLARE New TEXT DEFAULT '';
DECLARE Loc INT DEFAULT INSTR(String, Word);
DECLARE WLen INT DEFAULT Length(Word);
WHILE Loc DO
SET New = CONCAT(New, SUBSTR(String, 1, Loc-1), ELT(FLOOR(RAND()*5)+1, 'biterrr', 'stackoverflow', 'serress', 'ms-ms-ms', 'Nick'));
SET String = SUBSTR(String, Loc + WLen);
SET Loc = INSTR(String, Word);
END WHILE;
SET NEW = CONCAT(New, String);
RETURN New;
END$$
DELIMITER ;

UPDATE wp_posts SET post_content =
REPLACE_RANDOM(post_content, 'oldword');`

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете использовать ELT, чтобы выбрать случайное значение из списка строк:

UPDATE wp_posts SET post_content =
   REPLACE(post_content, 'oldword', ELT(FLOOR(RAND()*5)+1, 'hello', 'world', 'friend', 'tuesday', 'sunny'))

Если у вас есть другое количество строк в списке, просто изменитемножитель RAND() от 5 до количества строк.

Обновление

Если вам нужно заменить несколько вхождений строки во фразе разными словами, выпонадобится сохраненная функция.Этот сделает работу:

DELIMITER \\
DROP FUNCTION IF EXISTS Replace_Random\\
CREATE FUNCTION Replace_Random(String TEXT CHARACTER SET utf8, Word TEXT CHARACTER SET utf8)
RETURNS TEXT CHARACTER SET utf8
BEGIN
    DECLARE New TEXT CHARACTER SET utf8 DEFAULT '';
    DECLARE Loc INT DEFAULT INSTR(String, Word);
    DECLARE WLen INT DEFAULT Length(Word);
    WHILE Loc DO
        SET New = CONCAT(New, SUBSTR(String, 1, Loc-1), ELT(FLOOR(RAND()*5)+1, 'hello', 'world', 'friend', 'tuesday', 'sunny'));
        SET String = SUBSTR(String, Loc + WLen);
        SET Loc = INSTR(String, Word);
    END WHILE;
    SET NEW = CONCAT(New, String);
    RETURN New;
END\\
DELIMITER ;

SELECT REPLACE_RANDOM('a string with oldword in it twice - oldword!', 'oldword');

Вывод (различается):

a string with sunny in it twice - tuesday!
a string with hello in it twice - friend!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...