Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.116 c
3-1103017628
anatolyk
2004-12-14 12:47
2005.01.16
Ускорить получение данных


3-1102849364
able
2004-12-12 14:02
2005.01.16
SELECT по нескольким полям


3-1102708411
2004vip
2004-12-10 22:53
2005.01.16
Access


9-1096915359
Nightfire
2004-10-04 22:42
2005.01.16
Помогите с delphix


1-1104319868
vvllaadd
2004-12-29 14:31
2005.01.16
В Rave Reports 5.0 на странице необходимо отобразить 2 таблицы