parser

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

 

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

RANDOM

Baurjan 10.12.2002 14:57 / 10.12.2002 15:03

Попытался вытягивать из базы n случайных неповторяющихся записей. Сначала попытался сделать все это с помощью $.limit(n) $.offset(n-1), вот так:
@crhist[n][temp,n1,h1,present,i,i1,cnt]
$hist[^table::create{name	date	author	body
}]
$cnt(^int:sql{select count(*) from history})
$h1[^hash::create[]]
^for[i](1;$n){
	$present[true]
	^while($present eq true){
		$n1(^math:random($cnt)+1)
		$present[false]
		^for[i1](1;^h1._count[]){
			^if($n1==$h1.$i1){$present[true]}
		}
	}
	$h1.$i($n1)
	$temp[^table::sql{
		SELECT name, date, author, body
		FROM history
	}[$.limit($n1) $.offset(^eval($n1-1))]]
	^hist.join[$temp]
}
..но так в переменную $temp попадало больше одной записи. Но здесь limit и offset работали некорректно, и в итоге все пришлось переделать до вот этого состояния:
@hist[n][temp,h1,present,i,i1,cnt]
$hist[^table::create{name	date	author	body
}]
$cnt(^int:sql{select count(*) from history})
$h1[^hash::create[]]
^for[i](1;$n){
	$present[true]
	^while($present eq true){
		$temp[^table::sql{
			SELECT id, name, date, author, body
			FROM history
			ORDER BY RAND()
		}[$.limit(1)]]
		$present[false]
		^for[i1](1;^h1._count[]){
			^if($temp.id==$h1.$i1){$present[true]}
		}
	}
	$h1.$i($temp.id)
	^hist.join[$temp]
}
Почему так, а не иначе?
Кстати есть в Parser булевой тип данных?