Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка случайных значений 
:(
    Опции темы
kolombo777
Дата 18.10.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.9.2008

Репутация: нет
Всего: нет



Есть таблица link с полями id, url, title, category, active.
В этой таблице хранится список ссылок на сайты (url), название сайта (title),
категория (category), active (одобрен модератором, тип boolean). id это уникальный идентификатор.
Запрос такой SELECT url, title FROM link WHERE category=foto AND active=true

в PHP есть rand, это я знаю.
После этого запроса скрипт получит список сайтов,
теперь надо выбрать из получившегося списка случайным образом 10 разных сайтов.
Эти сайты не должны повторяться.
может поможет select distinct id from link;
Вот как это сделать не знаю, какой SQL-запрос использовать?

Это сообщение отредактировал(а) kolombo777 - 18.10.2008, 21:25
PM MAIL   Вверх
Валерия
Дата 18.10.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



SELECT url, title FROM link WHERE category=foto AND active=true ORDER BY RAND() LIMIT 10
PM MAIL   Вверх
bars80080
Дата 18.10.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



посмотри в сторону этой функции: http://php.ru/manual/function.shuffle.html

делаешь выборку в массив, затем замешиваешь массив
PM MAIL WWW   Вверх
Serkys
Дата 19.10.2008, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 1
Всего: 22



Согласен с bars80080, в MySQL ORDER BY RAND() работает довольно неоптимально.
Сначала достаём данные, потом их перемешиваем.
PM MAIL   Вверх
Валерия
Дата 20.10.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



А если данных очень и очень много? Все доставать?
А RAND() перемешает, и limit выдаст только n нужных..
PM MAIL   Вверх
Serkys
Дата 20.10.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 1
Всего: 22



Разумеется, доставать все записи и сортировать их через PHP - не выход.
Можно здесь посмотреть альтернативу: http://kurapov.name/article/1425/
PM MAIL   Вверх
kolombo777
Дата 21.10.2008, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.9.2008

Репутация: нет
Всего: нет



"ORDER BY RAND() LIMIT 10"
С запросом LIMIT я знаком, поэтому знаю что это лимит.
Да, идея правильная. Но эта rand может сгенерировать
одинаковые значения, а мне надо разные каждый раз.

Может результат первого запроса добавить с массив (как функция file) и из этого массива
for i=1 to 10 и каждый раз в теле цикла
вызывать rand (0, длина_массива)
и после этого удалять из массива выбранный элемент?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.