Перейти к содержимому


Запрос


В теме одно сообщение

#1 jazvenko

    Активный участник

  • Пользователи
  • PipPipPip
  • 224 сообщений

Отправлено 15 Сентябрь 2012 - 16:39

добрый день,

Помогите построить запрос:

В общем суть такая, запрос должен порядковые номера записей, сейчас это сделано так:
UPDATE
   cb_data114
SET
   `f1346` =
(
SELECT @p:=@p+1 AS num
FROM (SELECT @p:=0) s  
)
ORDER BY `f1656`,`f1652`,`f1634`, IF (f1353 = '0000-00-00 00:00:00', f1353, -1) asc, IF (f1348 = '', 1, -1),`id`

Но этот запрос рассчитает порядковый номер по всем записям, но нам необходимо чтобы но расчитал несколько порядков в одном запросе, Поле f1656 - это категория, необходимо чтобы для каждой категории расчет начинался с начала.

Помогите, никак не могу понять как сделать перебор внутри UPDATE

#2 jazvenko

    Активный участник

  • Пользователи
  • PipPipPip
  • 224 сообщений

Отправлено 15 Сентябрь 2012 - 18:27

Проблема решена, кому может пригодится запрос на проставление порядковых номеров, по группам


UPDATE
   cb_data114
SET
   `f1346` =
(
select @num
from (SELECT @num:=1) s1, (SELECT @type:='') s2
where
	(@num := if(`f1652` = @type, @num + 1, 1)) is not null
	and (@type := f1652) is not null
)
ORDER BY `f1656`,`f1652`,`f1634`, IF (f1353 = '0000-00-00 00:00:00', f1353, -1) asc, IF (f1348 = '', 1, -1),`id`  

Работает достаточно быстро, 0,1 - 0,2 сек. на 6000 записей





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных