![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| kolombo777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
SELECT url, title FROM link WHERE category=foto AND active=true ORDER BY RAND() LIMIT 10
|
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
посмотри в сторону этой функции: http://php.ru/manual/function.shuffle.html
делаешь выборку в массив, затем замешиваешь массив |
|||
|
||||
| Serkys |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 1 Всего: 22 |
Согласен с bars80080, в MySQL ORDER BY RAND() работает довольно неоптимально.
Сначала достаём данные, потом их перемешиваем. |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
А если данных очень и очень много? Все доставать?
А RAND() перемешает, и limit выдаст только n нужных.. |
|||
|
||||
| Serkys |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 1 Всего: 22 |
Разумеется, доставать все записи и сортировать их через PHP - не выход.
Можно здесь посмотреть альтернативу: http://kurapov.name/article/1425/ |
|||
|
||||
| kolombo777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 14.9.2008 Репутация: нет Всего: нет |
"ORDER BY RAND() LIMIT 10"
С запросом LIMIT я знаком, поэтому знаю что это лимит. Да, идея правильная. Но эта rand может сгенерировать одинаковые значения, а мне надо разные каждый раз. Может результат первого запроса добавить с массив (как функция file) и из этого массива for i=1 to 10 и каждый раз в теле цикла вызывать rand (0, длина_массива) и после этого удалять из массива выбранный элемент? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |