Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SELECT в UPDATE 
:(
    Опции темы
motorway
  Дата 21.6.2012, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Как в UPDATE запросе установить значение поля равным некоторой функции от значения того же поля в предыдущей или следующей записи (по ID)?
PM MAIL   Вверх
Akina
Дата 21.6.2012, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

update table t1, table t2
set t1.field1=func(t2.field2)
where t1.id=t2.id+1;
Обрати внимание - field1 и field2 ОБЯЗАНЫ быть РАЗНЫМИ полями. Если необходимо одно и то же поле - введи в структуру копию поля и используй его на стороне field2.
Если же ID - не синтетика, а автоинкремент с дырками - пронумеруй записи в подзапросах.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 21.6.2012, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Суть в том, что это одно и то же поле одной таблицы. Менять таблицы нельзя. Есть только вариант со временной таблицей в памяти MySQL. Такой подход поможет в этом случае?
PM MAIL   Вверх
motorway
Дата 21.6.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Цитата(Akina @ 21.6.2012,  19:25)
Код

update table t1, table t2
set t1.field1=func(t2.field2)
where t1.id=t2.id+1;
Обрати внимание - field1 и field2 ОБЯЗАНЫ быть РАЗНЫМИ полями. Если необходимо одно и то же поле - введи в структуру копию поля и используй его на стороне field2.
Если же ID - не синтетика, а автоинкремент с дырками - пронумеруй записи в подзапросах.

Делаю, так как ты написал - у меня в условии кроме t1.id=t2.id+1 ещё есть where t1.col=0. Использую временную таблицу (копию первой). Работает только если нули не подряд. Если подряд, не обновляет.
PM MAIL   Вверх
Akina
Дата 21.6.2012, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(motorway @  21.6.2012,  22:57 Найти цитируемый пост)
у меня в условии кроме t1.id=t2.id+1 ещё есть where t1.col=0. Использую временную таблицу (копию первой). Работает только если нули не подряд. Если подряд, не обновляет. 

А что у тебя ещё такого, о чём ты умалчиваешь? давай сразу всю задачу.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 21.6.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Ничего нет больше. Просто надо обновить поля, где 0, взяв предыдущее значение !=0.

Это сообщение отредактировал(а) motorway - 21.6.2012, 22:56
PM MAIL   Вверх
motorway
Дата 21.6.2012, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Почти разобрался через 2 переменные, но не совсем...
Вопрос остаётся.

Это сообщение отредактировал(а) motorway - 22.6.2012, 00:39
PM MAIL   Вверх
Akina
Дата 22.6.2012, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(motorway @  21.6.2012,  23:56 Найти цитируемый пост)
Ничего нет больше. Просто надо обновить поля, где 0, взяв предыдущее значение !=0.

Допустим, идут подряд (при нужной тебе сортировке) два нуля... чем обновляем первый из них? вторым нулём?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 22.6.2012, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



При нужной сортировке берем значение поля из строки с более ранним ID, и оттуда берём значение. Если подряд 2 нуля, то такое же значение должно и тут появиться. 
PM MAIL   Вверх
Akina
Дата 22.6.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Тогда хранимая процедура и курсор. Любое другое решение будет или тяжелее, или при определённых условиях неработоспособно.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 22.6.2012, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Если нетрудно, подскажите более подробно, в какую сторону тут копать.
PM MAIL   Вверх
Akina
Дата 22.6.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 22.6.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



А триггером при UPDATE здесь можно обойтись? Уже пробовал такой вариант, но пока не вышло
PM MAIL   Вверх
Akina
Дата 23.6.2012, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(motorway @  22.6.2012,  19:38 Найти цитируемый пост)
А триггером при UPDATE здесь можно обойтись? 

Нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.