вторник, 23 марта 2010 г.

Заполнение поля приоритета извлечения(Priority) на основе Order By в MySQL

Часто для извлечения записей в определенном порядке в таблицах создается специальное поле, назовем его Priority. В нем хранится целое число, которое и определяет порядковый номер конкретной записи в запросе. При таком подходе иногда возникает задача пронумеровать поля Priority c помощью Order By. Вот одно из решений:

SET @rownum=0;
UPDATE [имя_таблицы] t, (SELECT @rownum:=@rownum+1 rownum, [имя_таблицы].* FROM [имя_таблицы] Order By [Name] ASC) r
SET t.[Priority] = r.rownum
WHERE (t.[Id] = r.[Id]) ;

[Имя таблицы] - Имя таблицы в БД
[Name] - Имя поля, по которому производится сортировка в Order By
[Prioriry] - Специальное поле в таблице, которое используется для сортировки.
[Id] - Первичный ключ таблицы

Комментариев нет: