Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайная выборка определённого числа записей, С соблюдением порядка 
:(
    Опции темы
sergejzr
Дата 18.4.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Допустим даны записи. Я хочу выбрать определённое количество несколько случайных, но в порядке времени добавления.

допустим мне нужно 4 записи из:

а 2007-04-17 12:12:12
б 2007-04-17 12:12:13
в 2007-04-17 12:12:14
г 2007-04-17 12:12:15
д 2007-04-17 12:12:16
е 2007-04-17 12:12:17

если писать RAND(),date, то порядок сбивается, а если писать date,RAND(), то выходят ессно подряд, потому что дата везде разная.

Как разумно и просто сделать это?

Код

SELECT ... WHERE RAND()%2 = 0 ORDER by date

так сработает, но количество записей может быть меньше заданного. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Akina
Дата 18.4.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Код

select *
from
(
   select *
   from table
   order by rand()
   limit количество
)
order by date



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sergejzr
Дата 18.4.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



А без вложенных не получится? Мне почему то показалось, что они медленновато работают..


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GZep
Дата 18.4.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Akina, разве в mysql есть поддержка вложенных запросов?


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 18.4.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(sergejzr @  18.4.2007,  16:27 Найти цитируемый пост)
А без вложенных не получится?

Тебе нужно определенное количество записей. Это LIMIT. Который отбирает указанное количество записей в указанной сортировке (если ее нет - используется сортировка по первичному ключу, если я не ошибаюсь). А тебе нужно одновременно и сортировку по дате, и выборку случайных дат. Противоречие, и значит 2 запроса, вложенных. 

Цитата(GZep @  18.4.2007,  16:28 Найти цитируемый пост)
разве в mysql есть поддержка вложенных запросов? 

Можно, я проигнорирую этот вопрос?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SamDark
Дата 18.4.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



GZep
Есть.



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
sergejzr
Дата 19.4.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Проблем вот в чём... Допустим у меня выборка из полтора миллиона записей и мне надо только пять записей из неё в случайном порядке взять.
Если сделать ORED BY RAND() получится естественно полный капут...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Akina
Дата 19.4.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



sergejzr, а ты что хотел? чтобы выбрать 5 из полутора миллионов - по-любому надо отсортирить по рандому...

Но я могу тебе предложить другой вариант - сгенери в своем скрипте (РНР или что у тебя там) 5 случайных чисел в нужном диапазоне (1-1500000) и сделай 5 отдельных селектов по основному ключу
Код

select *
from table
order by ID
limit N,1

где N - сгенеренное тобой очередное случайное число.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SergeBS
Дата 23.4.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



sergejzr
Из таблицы - в другую записываешь N (сколько надо) записей случайно выбирая ID. Затем из новой таблицы выбираешь все записи, сортируя по времени. Почти как у Akina, только ID = твоему random. Т.е. 5 раз
Код

select * into bla-bla from table where id = RANDOM1 (RANDOM2,3,4,5)

Как 5 random получить - смотри сам как удобнее.


PM MAIL   Вверх
Akina
Дата 23.4.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



SergeBS, Где гарантия, что ID не содержит "дырок"? в которые ты можешь попасть при особой удаче...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SergeBS
Дата 23.4.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Akina
Ну я же не знаю всех условий. Это всего лишь направление - как по-моему можно сделать легко и быстро. Там еще может за компанию оказаться ограничение типа "записи не древнее 1 года" и т.п., например. Я не телепат.
PM MAIL   Вверх
Akina
Дата 23.4.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(SergeBS @  23.4.2007,  12:28 Найти цитируемый пост)
Там еще может за компанию оказаться ограничение типа "записи не древнее 1 года" и т.п., например. 

Это как раз в принципе не влияет ни на твой, ни на мой запрос.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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