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 17:56:00) [1]

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

> там про IB
и что? логика работы от этого меняется, чтоли? синтаксис тебе не говорили переносить, а говорили посмотреть обьяснения как оно работает, и очень хорошо что там IB, более полно т.к. там еще и саму функцию Rnd пришлось писать.


Flok   (2007-12-12 16:06:00) [2]

QNumber 'это поле в базе .. оно обозначает номер вопроса в базе
это поле счетчик и оно уникально ..
насчет првиеденной ветки .. там про IB и не факт что Аксесс это все покатит в Аксесс


sniknik   (2007-12-12 15:39:00) [3]

> но последовательность постоянно одинаковая ...
значение qnumber должно быть > 0, и это должно быть поле базы, а не параметр/просто число какое нибудь.

в приведенной ветке кстати обьясняется причина.


ПостОвый терминатор   (2007-12-12 15:36:00) [4]

Учитывая


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


конечно же, [9] Johnmen ©   (12.12.07 10:17) , но мне кажется, что необходимо дополнить:
выбор в цикле по разделам и внутренний цикл по количеству вопросов (не повторяющихся) из каждого раздела


Flok   (2007-12-12 15:34:00) [5]

В итоге при тексте  запроса
select  top 55   Qnumber
FROM QUESTIONS
WHERE Inbase=true  and razdel=3
order by RND(qnumber)

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


sniknik   (2007-12-12 15:32:00) [6]

> Ты хочешь сказать, что повторов в функции RND не будет?
в функции могут быть, но не в отобранных записях. т.е. дублей не будет, не откуда им там взяться (© > ЮЮ ©   (13.11.07 12:04) [36]).


Anatoly Podgoretsky   (2007-12-12 15:24:00) [7]

> sniknik  (12.12.2007 15:05:31)  [31]

Ты хочешь сказать, что повторов в функции RND не будет?


sniknik   (2007-12-12 15:16:00) [8]

> не избавляет от дублей.
это упрямство или твердость характера? ;о)) мы же уже обсуждали, и вроде как все доказано...
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1194821423&n=1


sniknik   (2007-12-12 15:05:00) [9]

> Это ошибочный запрос, не избавляет от дублей.
правильный. если вопросы на дублируются сами по себе, дублей не будет.


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

Ну не знаю у меня все работает ..
нету дублей среди 10 вопросов ...
именно этого я хотле и допиться


Anatoly Podgoretsky   (2007-12-12 14:42:00) [11]

> Flok  (12.12.2007 14:40:28)  [28]

Это ошибочный запрос, не избавляет от дублей.


Flok   (2007-12-12 14:40:00) [12]

нашел решение ...
Для Access можно так:
select top 10 * from voprosi order by rnd(ID)


Sergey13   (2007-12-12 13:20:00) [13]

> [26] Flok   (12.12.07 13:11)

Ну и чем тебе
> [9] Johnmen ©   (12.12.07 10:17)
не подходит?

Кроме того, на экзаменах обычно (во времена мой молодости по крайней мере) были билеты, которые легко реализовать в программе. Привязку вопросов к билетам можно сделать как статическую, так и динамическую (точнее програмно меняемую). Далее тянуть билет.


Flok   (2007-12-12 13:11:00) [14]

Anatoly Podgoretsky
Я пишу программу для тестов людей
тоесть я имею в виду что  в одном экзамене не должно быть одинаковых вопросов , а если вопрос № Х попадеться в экзамене  1 и 4 допутим человека ,( Люди  тестируються  Экзаменатором последовательно ... в рамках одного дня экзаменации ) то это не смертельно главное тчобы не было тесте одикаковых вопросов


Anatoly Podgoretsky   (2007-12-12 12:33:00) [15]

> Flok  (12.12.2007 12:25:24)  [24]

Каждый раз без повторения, невозможно, когда твой список кончится, он же не бездонный.
О каких 100 000 если ты не можешь из 100


Flok   (2007-12-12 12:25:00) [16]

Нет дело даже не в 100 записях...
это просто интересная задача одним запросом получать каждый раз случайные записи без повторения
в этой Базе записей  100 .. а если мне в следуюший раз надо будет выбирать из 100 000 случайные значения ?
освоить  данную выборку дело принципа


Anatoly Podgoretsky   (2007-12-12 12:02:00) [17]


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

На слово VBA обратил внимание, язык достаточно продвинутый, что бы справиться с такой простейшей задачей.


Anatoly Podgoretsky   (2007-12-12 12:00:00) [18]


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

Если запросить только ИД, и загнать их в StringList, то можно обойти от проверки на повторение.


Anatoly Podgoretsky   (2007-12-12 11:52:00) [19]

> Flok  (12.12.2007 10:00:05)  [5]

Чего на 100 записях то, откуда такие тормоза?


Sergey13   (2007-12-12 11:36:00) [20]

> [19] sniknik ©   (12.12.07 11:24)
> это возможно. и кстати, довольно элементарно.

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


Страницы:   1 2

Наверх

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