![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выборка случайных неповтоярющихся значиений из базы данных [D7, Access]
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)
> это возможно. и кстати, довольно элементарно.
Ну так раскажи как одним запросом получать каждый раз случайные записи без повторения, интересно же.