Описание

В MySQL нет такого понятия, как номер ряда в таблице и, тем более, в результате запроса. Подразумевается, что идентификация записей происходит по полю в таблице. Однако, могут возникнуть задачи позиционирования записей, где нужно знать порядковый номер ряда.

Делается это так:

SET @counter = 0;
SELECT @counter := @counter + 1 as row_number FROM table;

Пример использования

Например, есть такая таблица:

CREATE TABLE my_table (
	my_table_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	title VARCHAR(255) NOT NULL,
	PRIMARY KEY (my_table_id)
);

Данные из нее я сортирую по текстовому полю title. Мне нужно добавить возможность пользовательской сортировки. Я создам в таблице поле типа INT, позицию в списке, и стану сортировать по нему:

ALTER TABLE my_table ADD sort_order INT UNSIGNED NOT NULL DEFAULT '0';

Теперь мне нужно заполнить это поле позициями от старой сортировки. Я буду записывать в это поле номер ряда из результата запроса со старой сортировкой:

SET @counter = 0;
UPDATE my_table SET sort_order = (@counter := @counter + 1) ORDER BY title;
SELECT * FROM my_table ORDER BY sort_order;