| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > SELECT в UPDATE |
| Автор: motorway 21.6.2012, 17:32 |
| Как в UPDATE запросе установить значение поля равным некоторой функции от значения того же поля в предыдущей или следующей записи (по ID)? |
| Автор: Akina 21.6.2012, 19:25 | ||
Если же ID - не синтетика, а автоинкремент с дырками - пронумеруй записи в подзапросах. |
| Автор: motorway 21.6.2012, 19:36 |
| Суть в том, что это одно и то же поле одной таблицы. Менять таблицы нельзя. Есть только вариант со временной таблицей в памяти MySQL. Такой подход поможет в этом случае? |
| Автор: motorway 21.6.2012, 21:57 | ||||
Делаю, так как ты написал - у меня в условии кроме t1.id=t2.id+1 ещё есть where t1.col=0. Использую временную таблицу (копию первой). Работает только если нули не подряд. Если подряд, не обновляет. |
| Автор: motorway 21.6.2012, 22:56 |
| Ничего нет больше. Просто надо обновить поля, где 0, взяв предыдущее значение !=0. |
| Автор: motorway 21.6.2012, 23:40 |
| Почти разобрался через 2 переменные, но не совсем... Вопрос остаётся. |
| Автор: Akina 22.6.2012, 08:06 | ||
Допустим, идут подряд (при нужной тебе сортировке) два нуля... чем обновляем первый из них? вторым нулём? |
| Автор: motorway 22.6.2012, 11:14 |
| При нужной сортировке берем значение поля из строки с более ранним ID, и оттуда берём значение. Если подряд 2 нуля, то такое же значение должно и тут появиться. |
| Автор: Akina 22.6.2012, 11:23 |
| Тогда хранимая процедура и курсор. Любое другое решение будет или тяжелее, или при определённых условиях неработоспособно. |
| Автор: motorway 22.6.2012, 11:45 |
| Если нетрудно, подскажите более подробно, в какую сторону тут копать. |
| Автор: Akina 22.6.2012, 16:28 |
| http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html http://dev.mysql.com/doc/refman/5.5/en/declare-cursor.html |
| Автор: motorway 22.6.2012, 18:38 |
| А триггером при UPDATE здесь можно обойтись? Уже пробовал такой вариант, но пока не вышло |
| Автор: Akina 23.6.2012, 23:09 |
Нет. |