Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2012, 16:22   #11
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

TOP на сколько я знаю возвращает первые n записей, т.е. от 0 до n
select top '+IntToStr(Random(кол-во))+' *... from... order by id desc и этот запрос будет выдавать каждый раз разное количество записей вообще-то)))
это уже тогда так писать нужно SELECT TOP 1 * FROM table ORDER BY RND(id), но тут возникает две проблемы во-первых этот запрос перебирает всю таблицу, а не только 1 запись, а во вторых нужен id опять же, а ЕГО НЕТ

секрета нет, просто случайный выбор вопроса из базы, база уже готова и хоть щас там несколько сот вопросов, но будет больше
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 17:18   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
сразу говорю записи упорядочить не почему
стало быть база абсолютно не защищена от дубликатов.
скажете Будете проверять при вводе. Тогда не сработает вот это
Цитата:
я тут подумал и понял что могу избавиться запроса на всю таблицу,
Чтобы проверить на дубликат надо будет прочитать ВСЮ таблицу.
Цитата:
это пока не много, а что делать когда записей станет миллионы? переписывать всё?
А вот тогда-то и появятся дубликаты и все прочие "прелести" не контролируемого ввода данных.
И придется не просто просто переписать БД. А выкинуть все нажитое и начать писать снова.
Если упрямо хочется странного, то для решения задачи (чтобы не тянуть с сервера много записей) можно прикрутить вложенные запросы и разнонаправленное упорядочивание. "Ручная" имитация LIMIT.
Вот только опять нужно упорядочивание которого нет.
Пример давать не буду дабы не поощрять дурное проектирование.
Или давайте аргументированное почему ID не выход.

Да и отсутствие порядка не даст оным воспользоваться.
Но вот только если в поле есть разные данные то всегда существует отношение порядка. какое?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.09.2012, 19:36   #13
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

наличие id от дубликатов не очень то и избавит, можно наделать кучу записей, у них у всех будет разный id, но содержание одно? а что бы от них избавиться можно проверять всё базу, например в отдельном потоке и переодически, к примеру раз в сутки, а не каждый раз при вызове функции которая выбирает вопрос. я про запрос на всю базу писал конкретно для этого случая, а не вообще, разумееться есть запросы которые полностью таблице возвращают, но есть разница сделать такой запрос 1 или 1000
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 19:51   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
можно наделать кучу записей, у них у всех будет разный id, но содержание одно?
Если у них разный ID значит они уже разные. Одну можно оставить, прочие удалить. И научить так делать программу.
А Если у них нет ID, то можно удалить только сразу ВСЕ.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.09.2012 в 19:57.
evg_m вне форума Ответить с цитированием
Старый 20.09.2012, 19:55   #15
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

давайте не отходить от темы, как и что удалять я сам разберусь))
вы просто не видите не программы, не всей бызы
вопрос был в другом
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 20:08   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если так:
SELECT * FROM table where id>=:k and (id+1)<=:k
А в параметрах уже random() задавать для :k
?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2012, 20:17   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Без id в ACCESS не обойтись для оптимальной выборки. По id обязательно иметь индекс
2. id желательно максимально плотным и с минимумом дырок
3. Запрашиваем min и max id
4. Програмно вычислить рандомно k между min и max id
5. запрос
SELECT top 1 вопрос FROM Таблица WHERE id>=:k
6. Попутно возникнет усложнение в виде необходимости избавления от повторов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.09.2012, 20:18   #18
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

мне это напоминает дискотеку на граблях
говорю нету поля id все поля разные, но без индекса

Последний раз редактировалось kelod; 20.09.2012 в 20:20.
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 20:18   #19
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
вы просто не видите не программы, не всей бызы
вопрос был в другом
Так дай нам больше информации. Чтобы могли на основании этой информации отсеивать плохие варианты улучшений.
Например пока нет ответа.
Цитата:
Или давайте аргументированное почему ID не выход.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.09.2012, 20:20   #20
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

да и потом если бы даже id и был, записи то иногда удаляют и получаются дыры и тогда эти способы не подходят все
kelod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск записей (поле со списком) Megatron1 Microsoft Office Access 1 13.02.2012 12:06
Поиск в поле со списком Glender Microsoft Office Access 1 06.02.2012 11:14
Не могу сделать поле поиск в 2010 Sagdas Microsoft Office Access 2 08.12.2010 20:01
Поиск записи в поле со списком Swatch Microsoft Office Access 1 23.12.2009 19:09
Поиск в поле Memo omi БД в Delphi 6 01.03.2007 18:39