Мульти Авто Инкремент - PullRequest
0 голосов
/ 23 мая 2018

Мне нужна помощь, мне нужно автоматически увеличивать строки в выделении, за исключением того, что я должен перезапускать свое увеличение с каждым новым значением идентификатора. Я уже пробовал с (@cnt: = @cnt + 1) или COUNT(*), который считает вхождение, но я никогда не достигну желаемого результата

Я получаю каждый раз

++++++++++++++++++++++++++++++
+ increment |   id  +  value +
++++++++++++++++++++++++++++++
+     1     |  1    |  foo   +
+     2     |  1    |  bar   +
+     3     |  2    |  foo   +
+     4     |  3    |  bar   +
+     5     |  3    |  foo   +
++++++++++++++++++++++++++++++

Хотя мне бы хотелось, чтобы

++++++++++++++++++++++++++++++
+ increment |   id  +  value +
++++++++++++++++++++++++++++++
+     1     |   1   |  foo   +
+     2     |   1   |  bar   +
+     1     |   2   |  foo   +
+     1     |   3   |  bar   +
+     2     |   3   |  foo   +
++++++++++++++++++++++++++++++

1 Ответ

0 голосов
/ 23 мая 2018

Вот подход, который использует подход, задокументированный https://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/.. Он использует переменную и избегает проблем с отложенной оценкой, поскольку «MySQL не оценивает выражения, содержащие пользовательские переменные, до тех пор, пока они не будут отправлены клиенту».В нем используется подход использования функций для немедленной оценки переменных.

Вот что я использовал на sqlfiddle.com, чтобы попробовать:

Таблица, создание и вставка значений.

CREATE TABLE Table1
(`Id` int, `value` varchar(3))
;

INSERT INTO Table1
(`Id`, `value`)
VALUES
(1, 'foo'),
(1, 'bar'),
(2, 'foo'),
(3, 'bar'),
(3, 'foo')
; 

И SQL-запрос для MySQL

set @increment := 0, @id := '';

select @increment,  id, value
from Table1
where 0 <= greatest(
@increment := if(@id = id, @increment + 1, 1),
least(0, @id := id));

Вот результат:

@increment  id  value
1   1   foo
2   1   bar
1   2   foo
1   3   bar
2   3   foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...