powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка части поля из таблицы и запись в другую
17 сообщений из 17, страница 1 из 1
Выборка части поля из таблицы и запись в другую
    #39024447
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
имеются таблицы

oc_product

product_id int(11) | 200
model varchar(64) | 23442-03
sku varchar(64) | 1223

oc_product_description

product_id int(11) | 200
language_id int(11) | 4
name varchar(255) | Вытяжка Elica elite KX/1/60


Нужно из поля name бралось всё что идёт за маркой(Elica) и записывалось в поле model, желательно не перезаписывать концовку поля (-03).
В результате поле model должно выглядеть так elite KX/1/60
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39024732
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, а откуда сервер узнает, что марка - это именно "Elica"? Или это константа, одна на всю БД?
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39024861
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данный параметр я думаю лучше вводить через or или and как условие.
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39025101
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39025304
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiraeliusДанный параметр я думаю лучше вводить через or или and как условие.куда вводить-то, ёпть?
ну вот есть у нас таблица с дынными, как у вас в первом посте... дальше-то что?
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026205
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может побуквенно сравнивать?
Есть ещё таблица с производителями, можно оттуда брать. Какие могут быть варианты реализации?
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026210
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manufacturer_id int(11) | 1
name varchar(64) | Elica
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026212
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица oc_product будет выглядеть иначе

product_id int(11) | 200
model varchar(64) | 23442-03
sku varchar(64) | 1223
manufacturer_id
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026214
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiraelius, в oc_product или в oc_product_description есть ссылка на производителя? отдельным полем?
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026298
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в oc_product, см мой предыдущий пост. В эту таблицу добавляется manufacturer_id . В oc_product_description такого поля нет
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026847
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026943
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tiraelius,
при такой структуре таблиц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[oc_vendor]
manufacturer_id int(11) /*  1 */
name varchar(64) /*  Elica  */

[oc_product]
product_id int(11) /*  200 */
model varchar(64) /*  23442-03 */
sku varchar(64) /*  1223 */
manufacturer_id int(11) references oc_vendor(manufacturer_id)

[oc_product_description]
product_id int(11) references oc_product(product_id) /*  200 */
language_id int(11) /*  4 */
name varchar(255) /*  Вытяжка Elica elite KX/1/60 */


запрос такой
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/*
  с раскомментированными блоками - будет _попытка_ "сохранить концовку поля"
*/
update oc_vendor v, oc_product p, oc_product_description d
set p.model = 
    /* concat( */
        ltrim(substring(d.name, instr(d.name, v.name) + char_length(v.name)))
    /*    , case 
            when p.model regexp '-[0-9]+$' then 
                concat('-', substring_index(p.model, '-', -1))
            else '' 
        end
    ) */

where
  p.manufacturer_id = v.manufacturer_id and 
  d.product_id = p.product_id and
  d.language_id = ? and
  instr(d.name, v.name) > 0;

...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39026949
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
 pd.name
 ,p.model
 ,concat(
  substr(pd.name,locate(m.name,pd.name)+length(m.name)+1)
  ,substr(p.model,locate(p.model,'-'))
 ) as new_model
from oc_product p
join oc_product_description pd on p.product_id=pd.product_id
join manufacturers m on manufacturers.id=p.manufacturer_id

Скрипты создания вы не предоставили, поэтому даю селект, а не апдейт - сначала проверьте, всё ли тут правильно.
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39027051
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
 pd.name
 ,p.model
 ,concat(
  substr(pd.name,locate(m.name,pd.name)+length(m.name)+1)
  ,substr(p.model,locate(p.model,'-'))
 ) as new_model
from oc_product p
join oc_product_description pd on p.product_id=pd.product_id
join oc_manufacturer m on manufacturer_id=p.manufacturer_id



ошибка по нему
#1052 - Column 'manufacturer_id' in on clause is ambiguous
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39027059
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
update oc_manufacturer v, oc_product p, oc_product_description d
set p.model = 
    /* concat( */
        ltrim(substring(d.name, instr(d.name, v.name) + char_length(v.name)))
    /*    , case 
            when p.model regexp '-[0-9]+$' then 
                concat('-', substring_index(p.model, '-', -1))
            else '' 
        end
    ) */

where
  p.manufacturer_id = v.manufacturer_id and 
  d.product_id = p.product_id and
  p.product_id = 100 and
  instr(d.name, v.name) > 0;



Это сработало. но в конце затёр -02. Как можно доработать?
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39027527
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiraeliusКак можно доработать?Прочитать тот пост полностью. Вместе с комментариями. Или попытаться понять, что вообще этот запрос делает.
tiraeliusошибка по нему
#1052 - Column 'manufacturer_id' in on clause is ambiguousПотому что вы скопировали с ошибкой. Хотя вообще-то лучше так:
Код: sql
1.
join manufacturers m on m.id=p.manufacturer_id
...
Рейтинг: 0 / 0
Выборка части поля из таблицы и запись в другую
    #39027971
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
update oc_manufacturer v, oc_product p, oc_product_description d
set p.model = concat (ltrim(substring(d.name, instr(d.name, v.name) + char_length(v.name))),'-02')

where
  substr(model, -3) = '-02' and
  p.manufacturer_id = v.manufacturer_id and 
  d.product_id = p.product_id and
  p.product_id = 100 and
  instr(d.name, v.name) > 0;



Сделал вот так, не совсем то но работает. Спасибо всем.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка части поля из таблицы и запись в другую
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]