Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка части поля из таблицы и запись в другую / 17 сообщений из 17, страница 1 из 1
06.08.2015, 15:56:43
    #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
07.08.2015, 06:49:52
    #39024732
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
Простите, а откуда сервер узнает, что марка - это именно "Elica"? Или это константа, одна на всю БД?
...
Рейтинг: 0 / 0
07.08.2015, 11:16:07
    #39024861
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
Данный параметр я думаю лучше вводить через or или and как условие.
...
Рейтинг: 0 / 0
07.08.2015, 14:59:45
    #39025101
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
up
...
Рейтинг: 0 / 0
07.08.2015, 18:37:55
    #39025304
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
tiraeliusДанный параметр я думаю лучше вводить через or или and как условие.куда вводить-то, ёпть?
ну вот есть у нас таблица с дынными, как у вас в первом посте... дальше-то что?
...
Рейтинг: 0 / 0
10.08.2015, 12:58:14
    #39026205
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
Может побуквенно сравнивать?
Есть ещё таблица с производителями, можно оттуда брать. Какие могут быть варианты реализации?
...
Рейтинг: 0 / 0
10.08.2015, 13:00:59
    #39026210
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
manufacturer_id int(11) | 1
name varchar(64) | Elica
...
Рейтинг: 0 / 0
10.08.2015, 13:02:25
    #39026212
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
Таблица oc_product будет выглядеть иначе

product_id int(11) | 200
model varchar(64) | 23442-03
sku varchar(64) | 1223
manufacturer_id
...
Рейтинг: 0 / 0
10.08.2015, 13:04:10
    #39026214
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
tiraelius, в oc_product или в oc_product_description есть ссылка на производителя? отдельным полем?
...
Рейтинг: 0 / 0
10.08.2015, 14:14:15
    #39026298
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
Да, в oc_product, см мой предыдущий пост. В эту таблицу добавляется manufacturer_id . В oc_product_description такого поля нет
...
Рейтинг: 0 / 0
11.08.2015, 10:51:40
    #39026847
tiraelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка части поля из таблицы и запись в другую
up
...
Рейтинг: 0 / 0
11.08.2015, 12:07:22
    #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
11.08.2015, 12:13:16
    #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
11.08.2015, 14:28:06
    #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
11.08.2015, 14:33:38
    #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
12.08.2015, 04:59:15
    #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
12.08.2015, 15:37:16
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка части поля из таблицы и запись в другую / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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