MySQL: автоматическое добавление временного столбца в оператор select
Как создать и автоматически увеличить временный столбец в моей инструкции select с MySQL?
Вот что я до сих пор:
SET @cnt = 0;
SELECT
(@cnt [email protected] + 1) AS rowNumber,
rowID
FROM myTable
WHERE CategoryID = 1
Что возвращает:
+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+ (NULL) | 1 +
+ (NULL) | 25 +
+ (NULL) | 33 +
+ (NULL) | 150 +
+ (NULL) | 219 +
+++++++++++++++++++++
Но мне нужно:
+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+ 1 | 1 +
+ 2 | 25 +
+ 3 | 33 +
+ 4 | 150 +
+ ... | ... +
+++++++++++++++++++++
Ответы
Ответ 1
Это даст вам последовательный номер строки с 3
.
SELECT
(@cnt := @cnt + 1) AS rowNumber,
t.rowID
FROM myTable AS t
CROSS JOIN (SELECT @cnt := 0) AS dummy
WHERE t.CategoryID = 1
ORDER BY t.rowID ;
Результат
| ROWNUMBER | ROWID |
---------------------
| 1 | 1 |
| 2 | 25 |
| 3 | 33 |
| 4 | 150 |
Ответ 2
Попробуйте следующее:
SET @rownr=0;
SELECT @rownr:[email protected]+1 AS rowNumber, rowID
FROM myTable
WHERE CategoryID = 1
Ответ 3
Но что, если у вас есть group by
в инструкции select? подсчет будет отключен.
Для таких случаев единственным найденным решением является выбор вложенности:
SELECT (@cnt := @cnt + 1) AS rowNumber, t.*
from
(select
t.rowID
FROM myTable
WHERE CategoryID = 1
ORDER BY rowID) t
CROSS JOIN (SELECT @cnt := 0) AS dummy