Добавить рандом

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Вывести уведомления рандомным методом

#1 29 января 2013 в 15:24
Доброго времени!
Можно ли вывести уведомления, которые приходят при рассылке в клубе, рандомным методом?
Т.е. в разных клубах делается рассылка пользователям. Допустим, делается сто рассылок. Как вывести не все сто уведомлений в профиле пользователя, а только десять случайных? И чтобы при обновлении страницы, каждый раз уведомления выводились рандомом!
#2 29 января 2013 в 17:50
troi, в запросе нужно всего лишь заменить сортировку на ORDER BY RAND()
А для того чтобы выводить 10 — LIMIT 10
#3 29 января 2013 в 18:55
Уважаемый WALTERZ, в каком файле?
#4 30 января 2013 в 01:21
Тут /components/clubs/frontend.php ?
В какой строчке?
#5 30 января 2013 в 07:21
troi, в версии 1.10+
Строка 1089
  1. $sql = "SELECT m.*, m.from_id as sender_id {$this->inDB->select}
  2. FROM cms_user_msg m
  3. WHERE m.from_id < 0
  4. {$this->inDB->where}
  5. {$this->inDB->order_by}\n";
  6.  
  7. if ($this->inDB->limit){
  8. $sql .= "LIMIT {$this->inDB->limit}";
  9. }
Вместо
  1. {$this->inDB->order_by}\n
Это
  1. ORDER BY RAND()
#6 30 января 2013 в 10:54
Сделал изменения в файле /components/users/model.php как описано выше, выпадает ошибка

Parse error: syntax error, unexpected T_STRING in S:\home\inst.local\www\components\users\model.php on line 1096


и ничего не загружается.
#7 30 января 2013 в 11:09
Все перепробовал — не работает!
#8 30 января 2013 в 11:15
При манипуляциях, ругается на 1093 или 1096 строки.
#9 30 января 2013 в 15:21
Изменил запрос следующим образом
  1. $sql = "SELECT m.*, m.from_id as sender_id {$this->inDB->select}
  2. FROM cms_user_msg m
  3. WHERE m.from_id < 0
  4. {$this->inDB->where}
  5. {ORDER BY RAND()}\n";
  6.  
  7. if ($this->inDB->limit){
  8. $sql .= "LIMIT {$this->inDB->limit}";
  9. }
получается следующий результат

Написано, что в папке 16 сообщений, но не одно из них не выводится. При обновлении страницы, картина не меняется. Что не так?
#10 30 января 2013 в 15:25
Что нужно сделать, чтобы все работало по следующему алгоритму:
если новых сообщений больше 10 — выводим 10 случайных,
если новых сообщений меньше 10 — выводим все,
если все сообщения просмотрены — выводим 10 последних.
#11 30 января 2013 в 20:42
troi, Я ведь написал
Вместо
  1. {$this->inDB->order_by}\n
Это
  1. ORDER BY RAND()
То есть
в итоге должно быть
  1. $sql = "SELECT m.*, m.from_id as sender_id {$this->inDB->select}
  2. FROM cms_user_msg m
  3. WHERE m.from_id < 0
  4. {$this->inDB->where}
  5. ORDER BY RAND()";
  6.  
  7. if ($this->inDB->limit){
  8. $sql .= "LIMIT {$this->inDB->limit}";
  9. }
А для

если новых сообщений больше 10 — выводим 10 случайных,
если новых сообщений меньше 10 — выводим все,
если все сообщения просмотрены — выводим 10 последних.

troi
Нужны дополнительные условия. Даже представить не могу, зачем такое делать. Это ведь оповещения, они должны сортироваться по дате, иначе какой в них смысл.
Для вывода только 10ти уведомлений — в конце запроса LIMIT 10
#12 30 января 2013 в 21:24
WALTERZ, Спасибо огромное! Вопрос решен!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.