![]() |
|
Модераторы: Akina |
![]()
|
|
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Надо выбрать записи из таблицы отсортированные в случайном порядке (каждый раз при выполнении квери по-новому). Наложене курсора крайне не желательно.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| U-gene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.8.2002 Репутация: нет Всего: нет |
Есть такая функция RAND
Может быть написать так ? SELECT ... ORDER BY RAND(... /* от времени, как описано ниже а также от от ключевого поля\полей, дабы смягчить эффект описанного ниже*/) Немножко из описания
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Уже пробовал:
SELECT Rand(), * From table ORDER BY Rand() Rand вызывается только 1 раз, и в полученных данных первый столбец заполнен одинаковыми числами... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Не пойму? Rand генерирует одинаковые числа чтоли при рекверинге чтоли? Если так, то почему бы не делать перед этим Rand(-1)?
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| U-gene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.8.2002 Репутация: нет Всего: нет |
Может проблема в том, что ты пишешеь просто RAND() - без аргументов? Я же говорю о том, что в аргумент этой функции должны входит поле или комбинацию полей записи. В этом случае он должен вызываться заново для каждой строки. А время должно входить для того, что бы значения , возвращаемые этой функцией отличались для каждой записи от запуска к запуску.
Еще можно попытаься реализовать какую-нить формулу генерации псевдослучайных чисел вручную. Это в сети поискать надо. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Пробовал - те же яйца, вид сбоку. Может напишешь пример, возможно я делаю что-то не так, но похоже даже с аргументом полем генерируется одно и то же число для всех записей. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
А разве не нужно возбуждать генератор случайных функций при помощи функции RANDOMIZE()? Я не ручаюсь за TSQL, но в классических языках программирования перед вызовом функций типа RANDOM(), следует возбудить генератор функией типа RANDOMIZE()
-------------------- Account removed |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Дело не в Randomize, а в том что встреченную функцию Rand, SQL server обрабатывает лишь единажды, а далее использует её результат, попытки употреблять ее по разному в разных местах пока к нужному результату не привели. Похоже что любые конструкции c Rand выполняются следующим образом - однократно вычисляется Rand, далее вместо всех поставленных Rand вставляется вычесленное значение... Идея вызывать Rand с аргументом в виде значения поля хорошая, но реализовать мне ее не удалось
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| U-gene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.8.2002 Репутация: нет Всего: нет |
Как говорит наш глав.бух. - "через Ж... нараспев"
Я посмотрел это ранд. Как-то он хитрО работает. Нельзя сказать, что он генерит для разных строк АБСОЛЮТНО одинаковые числа, но разниза начинается где-то с 5-6 знака после запятой. Причем такая... хорошая разница. В общем, если упорядочивать начиная именно с этого пятого-шестого знака, то получается каждый раз в новом порядке. Вот пример - правда непричесывая и наобум, но работает.
OutID - это ключевое целочисленное поле. Можно конечно перевести в строку и отбросить первые 6-7 знаков. В целом очень плохо, просто ужасно. Это же для каждой таблицы надо что-то подбирать. А если ключевое поле - строка? Ее же придется тоже каким то хитрым способом в аргумены RAND втыкать. Неправильно это |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Спасибо, U-Gene! Это работает. Не могу сказать чтобы я был в восторге от такой квери, но как минимум это работает.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| math_beginer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 29.5.2003 Репутация: нет Всего: 1 |
Понимаю, что немного поздно
как и прежде
--------------------
Метод "Кнута и Пряника" - алгоритм, описанный в известной монографии Кнута и позднее модифицированный русским программистом Пряником. |
||||
|
|||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |