Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Инкрементирующаяся переменная в UPDATE / 9 сообщений из 9, страница 1 из 1
09.01.2018, 12:55
    #39580990
Инкрементирующаяся переменная в UPDATE
Всем привет. И всех поздравляю с праздниками. Теперь к делу.
Есть две таблицы:
Tab1 с полями: id1,nom
Tab2 с полями: id1,nom
Нужно в Tab1 найти записи соответствующие id1 в Tab2, среди них найти максимальное значение nom и вставить его в соответствующую строку таблицы Tab2. Причём в каждой следующей записи значение nom должно инкрементироваться
Того, кто дочитал аж до этого места, ждёт сюрприз в виде замечательного, бесспорно ставящего всё на свои места примера
Код: sql
1.
2.
3.
UPDATE Tab2,Tab1
      SET Tab2.nom=(SELECT MAX(nom)FROM Tab1 WHERE Tab2.id1= Tab1.id1)+1
WHERE Tab1.id1= Tab2.id1;


Мой запрос всё ,что нужно делает, но не инкрементирует nom. Просто, тупо увеличивает его на 1. То есть даже найдя к примеру три записи и Max(nom)=10, запрос просто проставит в поле nom 11,11,11, а я хочу чтобы было 11,12,13. Даже не надеюсь, что понятно объяснила, но очень старалась. Помогите друзья, решить задачу.
...
Рейтинг: 0 / 0
09.01.2018, 13:06
    #39580997
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инкрементирующаяся переменная в UPDATE
Анастасия Л2сюрприз в виде замечательного, бесспорно ставящего всё на свои места примера
Увы, ни фига он на место не ставит.

Покажите лучше пример с данными - исходное состояние и конечное состояние.

Ну или в качестве отражения из ХШ - попробуйте вот такую бредятину:

Код: sql
1.
2.
3.
UPDATE Tab2, Tab1, (SELECT @temp:=MAX(nom) FROM Tab1 WHERE Tab2.id1= Tab1.id1) dummy
      SET Tab2.nom=(@temp:=@temp+1)
WHERE Tab1.id1= Tab2.id1;
...
Рейтинг: 0 / 0
09.01.2018, 13:07
    #39580998
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инкрементирующаяся переменная в UPDATE
...
Рейтинг: 0 / 0
09.01.2018, 13:17
    #39581009
Инкрементирующаяся переменная в UPDATE
Друзья, как хорошо, что вы такие отзывчивые. Я уже было, запаслась терпением на дня два. Ай нет. Всё быстро и по делу. Два раза, честно пыталась соорудить пример с данными. Редактор не позволил красиво нарисовать. Попытаюсь ещё раз…
...
Рейтинг: 0 / 0
09.01.2018, 13:23
    #39581018
Инкрементирующаяся переменная в UPDATE
Состояние до выполнения запроса
Tab1
Id nom
A | 1
A | 2
B | 1
A | 3
C | 1
C | 2
C | 3
B | 2
Tab2
Id nom
A | 0
A |0
A |0
C |0
C |0
B |0
A |0
Хочу чтобы запрос записал в Tab2 такие nom
Tab2
Id nom
A | 4
A |5
A |6
C |4
C |5
B |3
A |7
...
Рейтинг: 0 / 0
09.01.2018, 13:23
    #39581019
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инкрементирующаяся переменная в UPDATE
Анастасия Л2Два раза, честно пыталась соорудить пример с данными. Редактор не позволил красиво нарисовать.Тег Table (кнопка наверху, между SUB и Прочее). Данные делить на колонки запятыми.
Код: sql
1.
2.
3.
4.
[CSV]
Заголовок 1, Заголовок 2
Значение 1, Значение 2
[/CSV]

Заголовок 1 Заголовок 2Значение 1 Значение 2
...
Рейтинг: 0 / 0
09.01.2018, 13:28
    #39581024
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инкрементирующаяся переменная в UPDATE
Ну тогда я верно указал - читайте FAQ, второе сообщение, пункты 1 и 2. Обычная нумерация строк в группе. С той лишь разницей, что начальное значение @rownum при изменении группы берётся из подзапроса, а не строго нулевое.
...
Рейтинг: 0 / 0
09.01.2018, 13:30
    #39581026
Инкрементирующаяся переменная в UPDATE
Спасибо. Буду читать. Но вы далеко не уходите )
...
Рейтинг: 0 / 0
09.01.2018, 17:15
    #39581182
Инкрементирующаяся переменная в UPDATE
Как-то «притулила» к моему запросу кусочек кода из вашего примера. Получилось такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
UPDATE test1,oc_product   
   SET test1.model=(SELECT MAX(ean)FROM oc_product WHERE oc_product.upc=test1.category_id)
WHERE test1.category_id=oc_product.upc;


select test1.*,
if(@typex=test1.category_id, -- если "type_a" не изменился
@rownum:=@rownum+1, -- то увеличить счетчик
@rownum:=test1.model+least(0,@typex:=test1.category_id)) AS rown -- иначе скинуть счетчик на 1 
-- и занести новое значение в @typex
  
from test1, (select @rownum:=1, @typex:='_') zz
order by category_id DESC;


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


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