mysql запрос

Lord Maverik
На сайте с 15.04.2003
Offline
471
482

не могу что-то сообразить, прошу помощи )

Есть таблица, с колонками

id - идентификатор

icode - альтернативный идентификатор

fcode - альтернативный идентификатор родителя

т.е. содержит иерархию, в моем случае рубрик.

Надо добавить поле id2, которое будет содержать идентификатор родителя.

Наверняка это можно сделать одним запросом легко. Но не могу сообразить как (

RedMall.Ru (https://redmall.ru) - Товары из Китая (Таобао, Tmall) с проверкой качества, скидка для форумчан 7% Партнерская программа 2 уровня: 5% + 5%. Подробнее. (https://redmall.ru/about/partner/)
Arsh
На сайте с 21.03.2007
Offline
199
#1

Насчет "легко" я б не горячился)

http://www.mysqltutorial.org/mysql-add-column/

Lord Maverik
На сайте с 15.04.2003
Offline
471
#2
Arsh:
Насчет "легко" я б не горячился)
http://www.mysqltutorial.org/mysql-add-column/

Ну как бы не смешно.

Вопрос не в том как добавить колонку, а как внести в нее данные одним запросом.

Arsh
На сайте с 21.03.2007
Offline
199
#3
Lord Maverik:
Вопрос не в том как добавить колонку, а как внести в нее данные одним запросом.

У Вас очень невнятный старт-пост. Правильно: есть таблицы..., есть поля... нужно то-то. Что за "идентификатор родителя"?

edogs software
На сайте с 15.12.2005
Offline
775
#4

Lord Maverik,

Как-то примерно так

update table t2 set t2.id2=(select t1.id from table t1 where t2.fcode2=t1.fcode)

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Lord Maverik
На сайте с 15.04.2003
Offline
471
#5
Arsh:
У Вас очень невнятный старт-пост. Правильно: есть таблицы..., есть поля... нужно то-то. Что за "идентификатор родителя"?

ну не знаю...

1.

есть колонка id - содержит уникальное число.

есть колонка icode содержит уникальную строку.

это характеристики одной строки.

======================

2.

есть колонка fcode - она содержит ссылку, запись, как угодно называйте, равную icode родительского элемента

3.

например

овощи - icode t56

-- морковь fcode- t56

-- перец focde - t56

фрукты - icode gf7

-- банан fcode - gf7

-- яблоко fccde - gf7

=====================

4.

есть поле id2 - пустое

5.

надо заполнить его значениями id , так, чтобы сохранилась иерархия аналогичная icode - fcode

Так понятно? Если нет, то на каком этапе?

---------- Добавлено 12.07.2018 в 17:36 ----------

edogs:
update table t2 set t2.id2=(select t1.id from table t1 where t2.fcode2=t1.fcode)

Ошибка.

#1093 - You can't specify target table 't2' for update in FROM clause

edogs software
На сайте с 15.12.2005
Offline
775
#6
Lord Maverik:

Ошибка.
#1093 - You can't specify target table 't2' for update in FROM clause

А, ну да. В mysql нельзя апдейтить таблицу из которой выбираешь. Так что в один запрос не получится.

Делайте в два. Копирните таблицу, потом сделайте вот тот запрос указав вместо t1 эту копию.

И вот тут мы очепятались, не " t2.fcode2=t1.fcode", а скорее " t2.fcode=t1.icode"

S
На сайте с 23.05.2004
Offline
316
#7

Гораздо быстрее написать скрипт, который пройдет по всем записям и добавит родителя.

Но если есть желание извратится с базой, можно создать временную таблицу, туда записать данные с id2, потом очистить основную и уже тогда перенести данные со временной.

Тогда теоретически можно в 3 запроса уложиться. Но про бакап обязательно подумайте :)

Это просто подпись.
Lord Maverik
На сайте с 15.04.2003
Offline
471
#8
edogs:
И вот тут мы очепятались, не " t2.fcode2=t1.fcode", а скорее " t2.fcode=t1.icode"

это я сам поправил

сделал через временную таблицу, спасибо

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