Random и Select. КАК?
Random и Select. КАК?
Надо выбрать n записей из таблицы случаяным образом.
подскажите пожалуйста как это сделать?
подскажите пожалуйста как это сделать?
Далею:
select FIRST 10 questions.*, GetRandom(1000) AS Rnd From questions;
Отвечает:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 13.
10.
Изменяю запрос:
select FIRST (10) questions.*, GetRandom(1000) AS Rnd From questions;
Теперь ругается на точку:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 27.
.
select FIRST 10 questions.*, GetRandom(1000) AS Rnd From questions;
Отвечает:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 13.
10.
Изменяю запрос:
select FIRST (10) questions.*, GetRandom(1000) AS Rnd From questions;
Теперь ругается на точку:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 27.
.
select First 10 questions.* From questions работает ? (для начала)Mr Null писал(а):Далею:
select FIRST 10 questions.*, GetRandom(1000) AS Rnd From questions;
Отвечает:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 13.
10.
Изменяю запрос:
select FIRST (10) questions.*, GetRandom(1000) AS Rnd From questions;
Теперь ругается на точку:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 27.
.
мндааа.... так questions.* вроде быб не льзя
напиши почеловечески
ты хоть функцию эту GetRandom(1000) задекларировал?
Т.е. выполнял DECLARE EXTERNAL FUNCTION....?
если нет - делай. Иначе опять не будет хотеть работатть
напиши почеловечески
Код: Выделить всё
select FIRST 10 * From questions
where id=GetRandom(1000);
Т.е. выполнял DECLARE EXTERNAL FUNCTION....?
если нет - делай. Иначе опять не будет хотеть работатть
Задекларировать-то задекларировал...
делаю select * From questions where id=GetRandom(1000); ничё не возращает, и ясно почему, у меня в таблице в момент тестирования всего лишь 50 записей, а в процессе работы программы может быть и 500 и 1500 и 3000 и т.д.
Есть ли какой нибудь другой способ решения такой проблеммы?
делаю select * From questions where id=GetRandom(1000); ничё не возращает, и ясно почему, у меня в таблице в момент тестирования всего лишь 50 записей, а в процессе работы программы может быть и 500 и 1500 и 3000 и т.д.
Есть ли какой нибудь другой способ решения такой проблеммы?
ХП придётся наверное, писать, аляMr Null писал(а):Задекларировать-то задекларировал...
делаю select * From questions where id=GetRandom(1000); ничё не возращает, и ясно почему, у меня в таблице в момент тестирования всего лишь 50 записей, а в процессе работы программы может быть и 500 и 1500 и 3000 и т.д.
Есть ли какой нибудь другой способ решения такой проблеммы?
begin
select count(id) from questions into :countQ
for Select ..... from questions where id=GetRandom(:countQ) into ..... do
suspend;
end
фсе равно фсе это фигня.
автор пытается выбрать случайные 10 номеров из 1000 номеров, при том что у него в базе пока только 50 записей. Потом, автор совершенно не врубается, что random может вернуть один и тот же номер 2 раза (или больше раз).
В общем, автору рекомендую сначала определиться с постановкой задачи, а уже потом приступать к реализации. если речь идет о лотерее, то можно даже на клиенте сгенерить эти 10 значений, с проверкой "уникальности", а потом засунуть их в where id in (1, 5, 15, 32...), потому что на этапе выборки записей думаю, скорость выборки значения иметь не будет.
автор пытается выбрать случайные 10 номеров из 1000 номеров, при том что у него в базе пока только 50 записей. Потом, автор совершенно не врубается, что random может вернуть один и тот же номер 2 раза (или больше раз).
В общем, автору рекомендую сначала определиться с постановкой задачи, а уже потом приступать к реализации. если речь идет о лотерее, то можно даже на клиенте сгенерить эти 10 значений, с проверкой "уникальности", а потом засунуть их в where id in (1, 5, 15, 32...), потому что на этапе выборки записей думаю, скорость выборки значения иметь не будет.
Задача определена уже как 2 года и софт отлично работает: "Система тестирования студентов", но вот тут вдруг препадам захотелось что б была поддержка так называемых "тем".
Например, в тесте "Уголовный кодекс РФ" есть 180 вопросов, которые разбиты на 10 тем, мне необходимо выбрать по 10 вопросов из каждой темы случайным образом...
Решение всей задачи сводится к точу, что б добавить в таблицу questions ещё одно поле theme_id, создать таблицу themes и не значительно поправить программу...
Например, в тесте "Уголовный кодекс РФ" есть 180 вопросов, которые разбиты на 10 тем, мне необходимо выбрать по 10 вопросов из каждой темы случайным образом...
Решение всей задачи сводится к точу, что б добавить в таблицу questions ещё одно поле theme_id, создать таблицу themes и не значительно поправить программу...
Можно попробовать использовать first (1) skip(n) где n - случайное числоMr Null писал(а):.. что б была поддержка так называемых "тем".
Например, в тесте "Уголовный кодекс РФ" есть 180 вопросов, которые разбиты на 10 тем, мне необходимо выбрать по 10 вопросов из каждой темы случайным образом...
Решение всей задачи сводится к точу, что б добавить в таблицу questions ещё одно поле theme_id, создать таблицу themes и не значительно поправить программу...
полученное в диапазоне (количество вопросов в теме/количество вопросов, которые необходимо показать + значение n из предыдущей итерации). И, соответственно, до цикла проинициализировать n = 0.
В процедуре сделать несложно. Правда распределение будет не очень хорошим.
Random и Select. КАК?
Нужно построить ПК, построить их перестановку с помощью транспозиций(замен местами пар со случайными номерами), дописать к временной табличке (переставленный ПК,Вопрос), отобрать первых 10
У меня проще не получилось

У меня проще не получилось
