2015-05-22 3 views
0

Я искал различные запросы MySQL с помощью подстановочных знаков и заменял вызовы, но я не могу найти именно то, что я ищу.Запрос MySQL с переменными данными

Мне нужно обновить короткие коды для всего сайта из-за обновления продукта Amazon в Post Plugin. Эта строка заменить вызов должен обрабатывать переменную строку:

Внутри WordPress базы данных для мамы блога:

Я должен заменить

[AMAZONPRODUCT=B0084IG8TM] 

с

[amazon-element asin="B0084IG8TM" fields="title,sm-image,new-price,button"] 

Поэтому вызов должен идентифицировать базовую строку, а затем идентифицировать 10-символьный код продукта WHICH VARIABLE и обернуть содержимое вокруг этой 10-символьной строки внутри квадратных скобок.

Предложения? Большое спасибо.

+0

это всегда начинаются с префикса '[AMAZONPRODUCT =]'? –

+0

Итак, вы заменяете все, начиная с самого начала и заканчивая «=» с помощью «[amazon-element asin =», и вы заменяете все с конца на «]» на «» поля = «title, sm -изображение, новая цена, кнопка "] '? Да, это кажется выполнимым. – Strawberry

ответ

1

Вы можете получить подстроку (при условии его всегда 10 символов, за которыми следует ]), как это:

select substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10) 

Сначала он вытаскивает последние 11 символов с помощью right(), а затем принимает первые 10 символов, которые используя substring()

Что вы можете засунуть вывод в concat() вызова получить необходимую строку:

select concat('[amazon-element asin="', substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10), '" fields="title,sm-image,new-price,button"]') 

Вы можете создать запрос на обновление, чтобы быть что-то вроде этого:

update <your_table> 
    set your_field = concat('[amazon-element asin="', substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10), '" fields="title,sm-image,new-price,button"]') 
    where your_field like '[AMAZONPRODUCT=%' 

Хорошо, так что это может быть где-нибудь в строке, так долго, как это только один раз в строке, это все еще относительно просто , Если он может быть в строке более одного раза, забудьте об этом с запросом и сделайте это с помощью php-скрипта или чего-то еще. (Или запускать обновления несколько раз, пока все случаи не будут изменены)

update wp_posts 
    set post_content = concat(left(post_content, locate('[AMAZONPRODUCT=', post_content) -1), '[amazon-element asin="',substring(post_content, locate('[AMAZONPRODUCT=', post_content) + 15, 10), '" fields="title,sm-image,new-price,button"]', substring(post_content, locate('[AMAZONPRODUCT=', post_content) + 26)) 
    where post_content like '%[AMAZONPRODUCT=%' 

demo here

+0

, который выглядит правильно, я собираюсь попробовать. – mttorley

+0

Хмм, весь [AMAZONPRODUCT = XXXXXXXXXX] на самом деле является частью гораздо большей строки (весь пост Wordpress), поэтому это ничего не делало: обновление wp_posts set post_content = concat ('[amazon-element asin = " ', substring (right (' [AMAZONPRODUCT = B0084IG8TM] ', 11), 1, 10),' "fields =" title, sm-image, new-price, button "] '), где post_content как' [AMAZONPRODUCT =% ' ** Извинения **, я должен был быть яснее. этот запрос не выполнял поиск внутри более крупного сообщения, а также не добавлял остальную часть полной строки ... :) – mttorley

+0

Это то, что происходит, когда вы не описываете полную проблему в вопросе. сколько раз строка может появляться в сообщении? один раз или более одного раза? –

Смежные вопросы