Вот пример кода:
DECLARE curFrag CURSOR FOR
SELECT id, name, space, distance, (space + IF(space=quant_left,10,0) - distance - ABS(space - quant_left)*2) AS rate
FROM temp_distance
ORDER BY rate DESC, name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET done = 0;
SET quant_left = quant;
OPEN cur1;
frag: REPEAT
FETCH cur1 INTO tid, tname, tspace, tdistance, trate;
IF done OR quant_left<=0 THEN LEAVE frag; END IF;
IF quant_left < tspace THEN
SET tquantity = quant_left;
ELSE
SET tquantity = tspace;
END IF;
SET quant_left = quant_left - tquantity;
UNTIL done OR quant_left<=0 END REPEAT;
CLOSE cur1;
То есть надо чтобы бралось несколько записей с максимальной оценкой (rate). После каждой выбранной записи оценки должны пересчитаться. После того, как все кол-во было размещено, нужно повторить алгоритм с другой формулой оценки. И так 3 раза. Подскажите какой-то вариант.
Отредактированно Герман Клюшин (21.10.2010 11:52:48)