| Новости | 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]
}Почему так, а не иначе?