Форум: "Базы";
Текущий архив: 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.46 MB
Время: 0.034 c