parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Dmitri 18.07.2004 17:46 / 18.07.2004 17:48

карткая структура, что есть сейчас:
ticket:
ticket_id
draw_id - тираж
order_id - заказ
data - данные билета

draw(тираж):
draw_id
min - нумеруем начиная с этого номер
max - номер последнего билета в этом тираже
current - номер последнего оплаченого билета

order:
order_id
status - оплачен ли.


Оплачивают "заказ"!!!
т.е. после оплаты нужно все билеты разделить по тиражам, т.к. в заказе могут быть билеты из многих тиражей.

сейчас алгоритм примерно таков:
#Все тиражи, билеты которых присутствуют в заказе.
$draws[^table::sql{
	SELECT 
		draw.draw_id, 
		draw.current, 
		draw.max 
	FROM ticket 
		LEFT JOIN draw ON draw.draw_id = ticket.draw_id 
	WHERE order_id = $order_id
}]

^draws.menu{
#текущий номер
	$current($draws.current)

#Все билеты этого тиража в этом заказе
	$tickets[^table::sql{SELECT ticket_id FROM ticket WHERE order = $order_id AND draw_id = $draws.draw_id}]

#Если в этом тираже еще есть место для стольких билетов
	if(  ($tickets.max - $tickets.current) >= ^tickets.count[] ){
#Для каждого устанавливаем номер на 1 больше предыдущего.	
		^tickets.menu{
			^current.inc()
			^void:sql{UPDATE ticket SET number = $current WHERE ticket_id = $tickets.ticket_id}
		}
	
#Сохраняем получившийся текущий номер
		^void:sql{UPDATE draw SET current = $current WHERE draw_id = $draws.current_id}
	}{ 
		^rem{Если места нет, делаем соотв. действия.}
	}
}