Подтвердить что ты не робот

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 +
+  ...      |   ... +
+++++++++++++++++++++
4b9b3361

Ответ 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