Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать следующий SQL запрос?

Tinytella Мастер (1430), закрыт 15 лет назад
Нужно выбрать из таблиц одну случайную строчку так, чтобы при следующем запросе эта же строчка не выпала
Лучший ответ
Cain Профи (830) 15 лет назад
создаёшь массив "array";
создаёшь переменную "a";

начало цикла

берёшь случаную цифру от 1 до "a", которой ещё нету в массиве "array";
записываешь эту цифру в "array"
вынимаешь нужную строчку из табилцы, под номером, который ты только что записал;

конец цикла
TinytellaМастер (1430) 15 лет назад
точно! спасибо!!!!)
Cain Профи (830) кстате, когда обьявляем переменную "а", то присваиваем ей кол-во рядов в таблице :-)
Остальные ответы
ЧАВ Высший разум (171139) 15 лет назад
Читай последовательно...
Psy666 Nobody Мудрец (12990) 15 лет назад
Точный синтаксис не подскажу, но общая идея: рандом-умножить и округлить до целого-привязать к id в таблице. Запрет на повтор: массив с сохранением предыдущего результа и приверка ч/з IF, если есть - повтор рендома.
Аццкий скорпиончегПросветленный (23519) 15 лет назад
идея в принципе логична, но затраты времени возрастут... Первую строку он возьмет быстро, вторую он должен проверить... Пусть в таблице 50 строк, 40 мы уже взяли, а рандом будет и будет нам настойчиво предлагать номер использованной строки, пока наконец не повезет...

А можно так: циклом создаем массив из номеров строк и всегда берем $arr[ 1 ]; при каждом запросе выводим нужную строку, удаляем первый элемент массива - unset($arr[ 1 ]) и перемешиваем массив с помощью функции shuffle...
Николай Мудрец (13868) 15 лет назад
Чисто при помощи SQL ты такого не провернёшь, т. к. для выполнения этой задачи необходимо как минимум использовать условный оператор (IF), а в языке SQL нет ни операторов цикла, ни условных операторов. Так что твою задачу можно реализовать только например через SQL используя Delphi или другой язык программирования поддерживающий условные операторы. Чисто через SQL эту задачу реализовать не возможно.
Аццкий скорпиончег Просветленный (23519) 15 лет назад
Можно так: циклом создаем массив из номеров строк и всегда берем $arr[ 1 ]; при каждом запросе выводим нужную строку, удаляем первый элемент массива - unset($arr[ 1 ]) и перемешиваем массив с помощью функции shuffle...
Похожие вопросы