, Частичная замена значений в поле по условию - SQL

Форум водкомоторников и водномоторников – катера, лодки, лодочные моторы, мотоциклы, путешествия, мототуризм, фото видео съемка видеомонтаж

 Последние фотографии:
boat_1s.jpg Снимок.JPG фото 1.jpg Водкоконькобежцы.jpg Полярники.jpg Gilbert_на_буксире.jpg

Автор Тема: Частичная замена значений в поле по условию - SQL  (Прочитано 1178 раз)

Описание: Для головастых вопросец

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Есть таблица smf_members, в текстовом поле additional_groups хранятся данные так: 1,5,12,16,19
 Есть поле date  - при выполнении условия date<Now() удалить из поля данные ,16

Так работает:
UPDATE `smf_members` set `additional_groups` = REPLACE(`additional_groups`, ",16", "");
 Условие добавляю - ошибка.
 Что-то типа такого наверное должно быть:
UPDATE `smf_members` set `additional_groups`, smf_members.end_date
FROM smf_members WHERE ((smf_members.end_date<Now()))
= REPLACE(`additional_groups`, ",16", "");
« Последнее редактирование: 10.04.2014, 19:02 от Valery »
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Онлайн Спонсор раздела

Re:
«Ответ #01 : »

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Допер. Вот такой запрос:
UPDATE `smf_members` set `additional_groups` = REPLACE(`additional_groups`, ",16", "")
WHERE (((Smf_members.end_date)<Now()));
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
точно! только чем тебе 16 не угодило... ???

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Так, есть мысля одна - ищу возможность реализации ->|
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн shkiper

  • водКомоторник
  • *******
  • Сообщений: 5 547
  • Спасибо +210/-0
Валер, а вы в этой ветке, что обсуждаете? Новые флaги расцвечивания Сиера, Квебек, Лима?
DF60A Москва 77, Алексей.

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 У меня с формулированием не только задачи но и ответа проблемы - тк. не мой профиль, Akwa лучше ответит.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
подозреваю, что в зависимости от текущей даты надо как-то список групп пользователей ограничить.
что за группа хранится под номером 16 мне не ведомо. Зачем это нужно пока тоже не понятно.
надо все-же мысль до конца додумать...
в личку пиши, если что

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Как в запросе правильно указать поле jos_zoo_item.created_by_alias, т.е. чтобы обновлялось данными из этого поля:
UPDATE jos_zoo_item SET `elements`
= REPLACE (`elements`,
'.jpg",',
' jos_zoo_item.created_by_alias & .jpg",
"title": "jos_zoo_item.name",
"link": "jos_zoo_item.created_by_alias",
');


У меня после обновления получается:
jos_zoo_item.created_by_alias.jpg
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
не уловил суть вопроса. а что должно получиться?
Судя по коду могу предположить, что обновить ты хочешь поля elements, title, link... нет?
лучше приведи исходную таблицу, таблицу из которой обновление идет, и что получить желаешь...
кроме того в запросе вообще нет условий отбора. так он тебе вообще все записи обновит в таблице jos_zoo_item

не нравится мне этот запрос... но еще вот вариант
UPDATE jos_zoo_item SET `elements`
= REPLACE (`elements`,
'.jpg",',
jos_zoo_item.created_by_alias & '.jpg",
      "title": "jos_zoo_item.name",
      "link": "jos_zoo_item.created_by_alias",
');

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Что-то простые вопросы ты как-то туго соображаешь ...:(

 Есть таблица 'jos_zoo_item', в ней поля 'created_by_alias' и 'elements'. Тип поля elements - LongTexts, т.е. там дофигища прописано...

Да, хочу обновить данные в поле 'elements' значениями из поля 'created_by_alias'

Имеем таблицу 'jos_zoo_item', в ней данные 'created_by_alias' и 'elements'
'created_by_alias' = all-iazs
 В поле 'elements'
"title": ""

После запроса надо получить в поле 'elements':
"title": "all-iazs.jpg"

А я получаю:
jos_zoo_item.created_by_alias.jpg

Т.е. я хочу указать, чтобы для обновления данные брались из поля jos_zoo_item.created_by_alias, а у меня получается просто "jos_zoo_item.created_by_alias"
Т.е. я неправильно указываю путь к полю с данными что ли.

 Вот кусок поля elements, который хочу изменить:


Образец как надо:

"95173bea-c1d0-4c51-bd34-1ccba7014eab":  {
"file": "images\/com_zoo\/boat_engine\/mercury\/mercury_2.5mh_fourstroke.jpg",
"title": "Mercury 2.5MH FourStroke",
"link": "images\/com_zoo\/boat_engine\/mercury\/mercury_2.5mh_fourstroke.jpg",
"target": "0",
"rel": "",
"width": 500,
"height": 377
},
   

Мой результат:

"95173bea-c1d0-4c51-bd34-1ccba7014eab":  {
"file": "images\/com_zoo\/boat_engine\/mercury\/mercury_200l_pro_xs_optimax [jos_zoo_item]![created_by_alias].jpg",
"title": "[jos_zoo_item]![name]",
"link": "[jos_zoo_item]![created_by_alias]",

"width": 500,
"height": 377
},
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
для начала курим мануал
REPLACE(str,from_str,to_str)

Returns the string str with all occurrences of the string from_str replaced by the string to_str. REPLACE() performs a case-sensitive match when searching for from_str.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

таким образом получаем:
UPDATE jos_zoo_item SET `elements` = REPLACE (`elements`, '.jpg",', jos_zoo_item.created_by_alias & '.jpg",');
все - тут только поменяли '.jpg",' на значение поля jos_zoo_item.created_by_alias плюс  '.jpg",'
если надо менять еще "title": "jos_zoo_item.name" и  "link": "jos_zoo_item.created_by_alias"

пишем еще два апдейта
UPDATE jos_zoo_item SET `elements` = REPLACE (`elements`, '"title":','"title":' & jos_zoo_item.name );
UPDATE jos_zoo_item SET `elements` = REPLACE (`elements`, '"link":','"link":' & jos_zoo_item.created_by_alias );

можно конечно три вложенных реплейса сделать, но так меньше шансов запутаться

а вобщето вопрос совсем не прост

например, подозреваю что надо менять например такой текст:
"link": "images\/com_zoo\/boat_engine\/mercury\/mercury_2.5mh_fourstroke.jpg",

хз как это алгоритмизировать в теле запроса...
не надо упрощать

« Последнее редактирование: 02.07.2014, 20:48 от Akwa »

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 025
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Поменял руками, на след импорт буду тестировать.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

  Теги:
 

Глобальный поиск портала

Онлайн кино HD


«Маленькое путешествие вокруг Европы»

]]>
↑ На палубу ↓ В трюм