Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

"случайная" сортировка   Найти похожие ветки 

 
Andrey V. ©   (2004-12-10 09:10) [0]

Полскажите как можно случайно замешать результат sql-запроса, каждый запуск запроса должен давать разную сортировку.
Или без промежуточной таблицы не обойтись ?


 
Ditrix ©   (2004-12-10 09:16) [1]

select *
from your_table
order by :order_param


 
DenK_vrtz ©   (2004-12-10 09:19) [2]

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


 
Andrey V. ©   (2004-12-10 09:46) [3]

то есть если я делаю выборку
select *
from table1
where Условие

сначала сделать
Update table1 set Rnd=:GenerateRandom
where Условие

?

ИМХО накладно по скорости может оказаться ...


 
Ditrix ©   (2004-12-10 10:19) [4]

Andrey V. ©   (10.12.04 09:46) [3]
зачем ?
просто перед вызовом пишешь
Query.ParamByName("order_param").AsString = YourRandomFieldName;
потом
Query.Open

или о Delphi речь вообще не идет?


 
Виталий Панасенко   (2004-12-10 10:30) [5]

А не проще ли (если делаем в программе а не в ISQL) по набору мотаться
Qry.First;
Qry.MoveBy(Random(Qry.RecordCount (или зарание подсчитанное значение)+1) ?


 
Andrey V. ©   (2004-12-10 14:22) [6]


> select *
> from your_table
> order by :order_param

А параметр вообще можно ставить в order by
Что-то у меня и программа ругается и IBExpert не принимает подоьную конструкцию...


 
Val ©   (2004-12-10 18:06) [7]

> [6] Andrey V. ©   (10.12.04 14:22)
нет, конкатенируйте. только это будет сортировка по случайному столбцу - вам это надо?


 
Ильичев С.А. ©   (2004-12-10 23:14) [8]

У меня была такая задача. Решил следующим образом:

Во-первых нужен генератор случайных чисел коего нет в ib.
Пишем библиотеку с одной функцией.

library TestSystem_udf;

uses System;

function RANDOM_AT(var Range: Integer): Integer; cdecl;
begin
 Randomize;
 Result:=Random(Range);
end;

exports RANDOM_AT;

end.


Кладём её куда следует.

Далее объявляем в базе нашу udf.

declare external function RANDOM
 integer
 returns integer by value
entry_point "RANDOM_AT"
module_name "TestSystem_udf.dll";


Затем добавляем к нужной таблице столбец
(назовём его RandomValue)

Нуивот.
Каждый раз перед нашим главным запросом(1) выполняем
подготовительный, вида:
UPDATE TableName SET RandomValue=RANDOM(100)
Это поле заполняется случанными значениями.
Всё.
В запросе(1) заказываем сортировку по полю RandomValue;

Замечу, что каждый раз заполнять случайными значениями
всю таблицу не рационально. Обновлять надо только те записи
которые могут попать в результат запроса(1).
А значит в подготовительном запросе надо указать условие
точно такое же как и в запросе(1).

И, кстати, да. Пора эту тему в FAQ занести.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
14-1104130044
Чеширский_Кот
2004-12-27 09:47
2005.01.16
Как вы полагаете?


1-1104563793
Dr. Genius
2005-01-01 10:16
2005.01.16
Программу - в системный трей


3-1103112423
Nata
2004-12-15 15:07
2005.01.16
Закрепить столбец в DBGrid


6-1098890522
CRACKISH
2004-10-27 19:22
2005.01.16
TTcpServer и TTcpServer из вкладки Internet


1-1104321474
AlexXn
2004-12-29 14:57
2005.01.16
Popup Form





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский