Главная страница
    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.034 c
10-1080826752
serg128
2004-04-01 17:39
2005.01.16
Как в ClientDataSet заблокировать запись?


3-1103024010
Black
2004-12-14 14:33
2005.01.16
Пользаватели в SQL Server 2000


3-1102684136
Rule
2004-12-10 16:08
2005.01.16
Вопрос простой, аж смешно по DBComboBox


3-1103005593
leonon
2004-12-14 09:26
2005.01.16
EVariantError - При вызове Locate


6-1097776696
Viper
2004-10-14 21:58
2005.01.16
Обучение работы с сетью





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