Главная страница
    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.46 MB
Время: 0.046 c
9-1096003204
Rem
2004-09-24 09:20
2005.01.16
Перпендикуляр


14-1104399985
kai
2004-12-30 12:46
2005.01.16
тормоза программы, работающей с mdb через jet


1-1104718282
Kidman
2005-01-03 05:11
2005.01.16
Глюкает модальность формы (CLX)


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


1-1104098039
Arsn55
2004-12-27 00:53
2005.01.16
чтение *.doc





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский