Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
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] }Почему так, а не иначе?