Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выборка случайных неповтоярющихся значиений из базы данных [D7, Access]


Страницы:   1 2

Flok ©   (2007-12-12 09:08:00) 

Добрый день уважаемые мастера
У меня возник интресный вопрос ..
может кто поделиться своими соображаниями ?

Есть база ACCESS ней 100 записей , из них 50 соотвествуют определнным условиям.Работа ведеться через  ADO . Запросы выполняет ADOQuery .
Как модифицировать текст запроса что бы он выбирал только 10 случайных , не повторяющихся записей (а условию отбора соответсввует 50 вопросов ) .

Заранее спасибо ..


sniknik   (2007-12-12 11:24:00) [21]

> он уже захотел просто запросом все сразу готовое получать
это возможно. и кстати, довольно элементарно.

> tO sniknik  НеТ ОШИБКА НЕ В 17  строке а пишет .. неверно указаны параметры ...(недостаточное количесво )
а в чем же еще? семнадцатая и есть.


flok   (2007-12-12 11:16:00) [22]

tO sniknik  НеТ ОШИБКА НЕ В 17  строке а пишет .. неверно указаны параметры ...(недостаточное количесво )
да  вы правильно понимаете  10 из 50 , причем в этих 10 нет одинаковых


Sergey13   (2007-12-12 11:15:00) [23]

> [14] sniknik ©   (12.12.07 10:53)
> а можно ее мне?
Я не против.

>  правда в вопросе отличие там случайные записи из выборки имеются ввиду
Но в
> [8] Flok   (12.12.07 10:14)
он уже захотел просто запросом все сразу готовое получать


Сергей М.   (2007-12-12 11:03:00) [24]


> Jet поддерживает практически все из VBA


Может быть. Возражать не буду, ибо никогда не интересовался всеми возможностями jet


sniknik   (2007-12-12 10:59:00) [25]

+ дополнение
"не повторяющихся записей" в вопросе ([0]) я воспринимаю как, неповторяющиеся 10-ть из 50-и (/n) возможны.

"неповторяющиеся случайности" это уже вариант когда первое множество 10-и случайных не пересекаются со вторым из 10-и и т.д. пока все 50-т(/n) не кончатся.


sniknik   (2007-12-12 10:53:00) [26]

> в инете сть инфа про опретор rnd  но заставить его работать .. я не смог
наверное изза ошибки в 17й строке?

> Этот оператор имеет отношение только к MSAccess VBA.
Jet поддерживает практически все из VBA (естественно диалоговые функции не имеются ввиду).

> можно и нобелевку огрести.
а можно ее мне? правда в вопросе отличие там случайные записи из выборки имеются ввиду (что возможно), а ты почемуто о "неповторяющихся случайностях" начал говорить... (без сохранения результатов предыдущих невозможно, или не будут случайными).


Сергей М.   (2007-12-12 10:46:00) [27]


> Flok   (12.12.07 10:29) [11]


Тогда наиболее простое и эффективное решение тебе уже предложено в [9]

И одним-единственным запросом в описанных тобой условиях не обойтись.


Sergey13   (2007-12-12 10:33:00) [28]

> [8] Flok   (12.12.07 10:14)
> а мне же интресно модифицировать запрос чтобы получить иненно
> сразу список случайных вопросов

Я конечто далеко не математик, но, мне кажется, если ты сможешь вывести закон получения неповторяющихся случайностей из произвольного множества, который можно уложить в компьютерный алгоритм, можно и нобелевку огрести.


Flok   (2007-12-12 10:29:00) [29]

Сергей М.

Это сейчас всего 50 а в последствии может быть и 100 и 1000 ..
здесь важно , принципиально важно  именно модифицировать запрос


Сергей М.   (2007-12-12 10:18:00) [30]


> Flok   (12.12.07 10:14) [8]


Ради всего 10-ти записей из всего 50-ти возможных можно и не менять текущую схему


Johnmen   (2007-12-12 10:17:00) [31]


> ну я так и сделал юю отобрал все ...генерирую случайный
> номер и ищу егов базе но ..это долго и не эффективно

Ничего подобного. Ты делаешь не так, как я говорил.
Повторю.
Запросом отбирается всё множество идентификаторов, из которых предполагается выбирать случайные неповторяющиеся.
Эти значения имеют порядковый номер в локальном НД. Генерятся случайные числа из диапазона пор.номеров в необходимом количестве. Попутно проверяется неповторяемость сгенеренных номеров.
Запросом отбираются записи с идентификаторами, соответствующими полученным номерам.


Flok   (2007-12-12 10:14:00) [32]

сейчас работа ведеться  так ..
выбираеться список вопросов ..
загонятеться в датасет
генерируються случайные значения номнера записи в дата сете .. загоняються в массив проверка идет на е совпадения а потом уже едет поик в таблице .. по сохранему значению номера в базе .. прочитанного из номеров сгенерированных значений ...
а мне же интресно модифицировать запрос чтобы получить иненно сразу список случайных вопросов


Сергей М.   (2007-12-12 10:12:00) [33]


> в инете сть инфа про опретор rnd


Этот оператор имеет отношение только к MSAccess VBA.


> сначала надо отобрать все впросы


Если в таблице поле перв.ключа содержит заранее известный набор значений (например, записи в этом поле последовательно пронумерованы от 1 до 100), то нет необходимости тянуть на сторону клиента все записи.


Sergey13   (2007-12-12 10:06:00) [34]

> [5] Flok   (12.12.07 10:00)
> генерирую случайный номер и ищу егов базе но ..
> это долго и не эффективно

В этом случае наверное стоит работать просто с порядковым номером записи в датасете, а не с идентификатором таблицы.
Кроме того желательно сохранять выбранные ранее номера, что бы не повторять их.


Flok   (2007-12-12 10:00:00) [35]

>>Johnmen ©   (12.12.07 09:52) [4]

Отбираешь ВСЕ вопросы, из их номеров выбираешь случайные, запрашиваешь эти выбранные.

ну я так и сделал юю отобрал все ...
генерирую случайный номер и ищу егов базе но ..
это долго и не эффективно

сначала надо отобрать все впросы ..
потом сгенерировать случайные значения проветить чтобы они не повторялись ..

а ведь наврняка в запросе можноь выбирать случайные вопросы
в инете сть инфа про опретор rnd  но заставить его работать .. я не смог


Johnmen   (2007-12-12 09:52:00) [36]

Отбираешь ВСЕ вопросы, из их номеров выбираешь случайные, запрашиваешь эти выбранные.


Flok   (2007-12-12 09:50:00) [37]

to Johnmen
это база вопросов
есть поле уникальное  Номер вопроса в базе
и поле раздел
допустим надо отобрать 5 случайных вопросов 3 го раздела ..
2 вопроса 4 го раздела  и так далее ...
тоесть просто сгенировать 10 номер вопросоов а потом из выбрать в базе не получиться

to Sergey13 - работа локальная
ну вообще чем меньше повторений тем лучше ..


Sergey13   (2007-12-12 09:12:00) [38]

> [0] Flok   (12.12.07 09:08)
> не повторяющихся записей

Никогда не повторяющихся?

Работа локальная?


Johnmen   (2007-12-12 09:11:00) [39]

Сгенерить 10 случайных значений уникального идентификатора и отобрать записи, им соответствующие.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо