parser

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

 

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

дубликаты у меня появлялись из-за неправилного SQL-запроса, формировавшего исходную таблицу

Артём 06.02.2003 18:34 / 06.02.2003 18:38

все супер, только если $quant > ^source_table.count[] то происходит ошибка зацыкливания
endless loop detected
while

g:/www/html/class/catalog.p(948)
exception.type=parser.runtime 
я сделал так
@revolver[source_table;quant][added;rand_code;count]
# $count засовываю в переменную, чтобы не доставать 
# в процессе выполнения $rand_code каждый раз ее из $source_table
$count(^source_table.count[])

^if($quant){
	^if($quant > $count){
		$quant($count)
	}
}{
	$quant(1)
}
$result[^source_table.select(0)]

## хеш, куда пишем то, что уже добавили в результат.
## нужно, чтобы не было дублирования
$added[^hash::create[]]

## код, который вычисляет нам в цикле случайную строку
$rand_code{^eval(^math:random($count)+1)}
^while($quant > ^result.count[]){
	$rand($rand_code)
	^while($added.[$rand]){$rand($rand_code)}
	^result.join[^source_table.select(^source_table.line[] == $rand))]
	^source_table.offset[set](0)
	^added.add[$.$rand(1)]
}
#end @revolver[]
а по первому варианту, насчет того что хэш не гарантирует порядка:
то там ведь привязка в хэше была к номеру строки в таблице $structure, так же с значениями.

хотя все равно в твоем примере это все проще.