Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать по дате + рандом + лимит
 
 автор: TetRiska   (06.07.2012 в 14:06)   письмо автору
 
 

Всем привет. Вот запрос:
SELECT `em_newart_date`,`em_newart_name`,
        `em_newart_url`,
        `em_newart_ftext`,
        `em_newart_image_200`
 FROM `em_newart`
 WHERE `em_newart_type` = 'n'
 AND `em_newart_access` = 'y'
 AND `em_newart_date` < NOW()
 AND `em_newart_category` = 86
 ORDER BY `em_newart_date` DESC, RAND()
 LIMIT 3

Нужно, чтобы выбрало сначала по дате, самая свежая впереди, а потом рандомно из этого количества выбрало 3 штуки. Пока не могу понять почему запрос всегда выводит одно и тоже, не рандомизируя.

  Ответить  
 
 автор: cheops   (06.07.2012 в 15:22)   письмо автору
 
   для: TetRiska   (06.07.2012 в 14:06)
 

Правильно ли понимаю, что нужно выбрать три последние новости, а потом перемешать их в случайном порядке? Тогда лучше задействовать вложенный запрос, который поместить в конструкцию FROM и уже эту вложенную таблицу из 3-х элементов перемешать при при помощи ORDER BY RAND()

  Ответить  
 
 автор: TetRiska   (06.07.2012 в 16:34)   письмо автору
 
   для: cheops   (06.07.2012 в 15:22)
 

нет, не так, нужно выбрать все новости от самых свежих до не свежих, перемешать и оставить только 3 штуки

  Ответить  
 
 автор: cheops   (06.07.2012 в 16:42)   письмо автору
 
   для: TetRiska   (06.07.2012 в 16:34)
 

Тогда зачем вам ORDER BY `em_newart_date` DESC? просто мешайте их при помощи ORDER BY RAND() и берите 3 штуки при помощи LIMIT.

  Ответить  
 
 автор: TetRiska   (06.07.2012 в 17:17)   письмо автору
 
   для: cheops   (06.07.2012 в 16:42)
 

логика изменилась, нужно так:
нужно выстроить по свежести, свежие сверху, после чего выбрать 10 новостей и из них уже выбрать любые 3 рандомно

и как собственно реализовать такой запрос?

UPD

Вот запрос по примеру сделал, не знаю как корректно по синтаксису, но выводит вроде как надо

SELECT `em_newart_date`,
       `em_newart_name`,
       `em_newart_url`,
       `em_newart_ftext`,
       `em_newart_image_200` 
FROM(
     SELECT `em_newart_id` FROM `em_newart`
      WHERE `em_newart_type` = 'n'
      AND `em_newart_access` = 'y'
      AND `em_newart_date` < NOW()
      AND `em_newart_category` = 86
      ORDER BY `em_newart_date` DESC
      LIMIT 10
    ) as ids 
JOIN `em_newart` ON `em_newart`.`em_newart_id` = ids.`em_newart_id` ORDER BY RAND() LIMIT 3

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования