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

Форум MySQL

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

 

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

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

тема: Вывести пять новостей
 
 автор: OLi   (15.07.2011 в 14:12)   письмо автору
 
 

у меня есть записи в базе...нужно выводить последние 5 добавленные и выводить их в течение 5 дней независимо от того какие были добавлены еще...в поле date_d я записываю время истечения отображения, как cформировать запрос?

  Ответить  
 
 автор: cheops   (15.07.2011 в 14:17)   письмо автору
 
   для: OLi   (15.07.2011 в 14:12)
 

Хм... а поле date_d других полей в таблице какое значение принимает? Допустим отображаем мы данные, добавляются еще 10 новых записей, у них поле date_d будет какое? И как оно будет отличаться от текущего значения? Через 5 дней мы к ним должны автоматически перейти? Если да, нужно больше подробностей.

  Ответить  
 
 автор: OLi   (15.07.2011 в 14:50)   письмо автору
 
   для: cheops   (15.07.2011 в 14:17)
 

Поле date_d формируется при добавлении записи, как текущее время в (с)+5 дней...

  Ответить  
 
 автор: cheops   (15.07.2011 в 14:53)   письмо автору
 
   для: OLi   (15.07.2011 в 14:50)
 

Правильно ли я понимаю, что нужно отображать самые старые новости в интервале date_d > NOW()? Если да, тогда запрос может выглядеть следующим образом
SELECT * FROM tbl
WHERE date_d > NOW()
ORDER BY date_d
LIMIT 5

  Ответить  
 
 автор: OLi   (15.07.2011 в 15:03)   письмо автору
 
   для: cheops   (15.07.2011 в 14:53)
 

Не совсем..Постараюсь еще раз объяснить:
При добавлении в поле date_d записывается дата окончания отображения этой записи, рассчитанная на 5 дней...т-е в таком случае ваш запрос подходит, но могут быть добавлены в этот же день еще около 10 записей, которые исходя из вашего запроса date_d > NOW() опять таки отобразятся..но этого не надо делать - пока первая 5-ка записей не "провисела" на сайте отложенные ей 5 дней, а лишь потом отобразить следующие записи на 5 дней и тд

  Ответить  
 
 автор: cheops   (15.07.2011 в 16:33)   письмо автору
 
   для: OLi   (15.07.2011 в 15:03)
 

Они не отобразятся, если вы им не увеличите значение date_d до 10 дней... вернее они отобразятся на несколько часов, пока у них не закончится период date_d, в момент когда у первых записей этот период закончится... может имеет смысл как-то коррелировать date_d? Или вообще пересмотреть систему отображения, не привязываясь к полю date_d.

  Ответить  
 
 автор: OLi   (15.07.2011 в 18:38)   письмо автору
 
   для: cheops   (15.07.2011 в 16:33)
 

А как лучше сделать? По логике я думал так как выше

  Ответить  
 
 автор: cheops   (15.07.2011 в 19:33)   письмо автору
 
   для: OLi   (15.07.2011 в 18:38)
 

Может как-то к первичному ключу привязаться, т.е. выводить эти пять дней эти пять ссылок, следующие - следующие, а в это время пусть они себе накапливаются.

  Ответить  
 
 автор: OLi   (15.07.2011 в 22:11)   письмо автору
 
   для: cheops   (15.07.2011 в 19:33)
 

А как мне делать проверку на истекшие 5 дней? да по ключу не совсем понял..

  Ответить  
 
 автор: cheops   (15.07.2011 в 23:02)   письмо автору
 
   для: OLi   (15.07.2011 в 22:11)
 

Не очень понятно, я предлагаю алгоритм вроде того, какой исопльзуется для вывода цитаты дня, когда требуется выводить не случайную цитату, а одну за другой, ориентируясь на первичный ключ, когда вы достигаете конца таблицы, все начинается сначала, если вы таблицу заполняете со скоростью течения дней или быстрее, то к началу она уже не возвращается. Если вам такой подход интересен, можно его обсудить.

  Ответить  
 
 автор: OLi   (15.07.2011 в 23:49)   письмо автору
 
   для: cheops   (15.07.2011 в 23:02)
 

Давайте обсудим

  Ответить  
 
 автор: cheops   (16.07.2011 в 10:43)   письмо автору
 
   для: OLi   (15.07.2011 в 23:49)
 

Для одного значения, механизм может выглядеть следующим образом
SELECT * FROM tbl
WHERE id_position = (SELECT (1 + DAYOFYEAR(NOW()) % COUNT(*)) FROM tbl)
LIMIT 1

  Ответить  
 
 автор: OLi   (16.07.2011 в 13:46)   письмо автору
 
   для: cheops   (16.07.2011 в 10:43)
 

А можете дать пояснение к запросу?

  Ответить  
 
 автор: cheops   (16.07.2011 в 13:48)   письмо автору
 
   для: OLi   (16.07.2011 в 13:46)
 

Количество дней в году мы делим на количество записей в таблице и берем от этого значения отстаток деления - его используем в качестве первичного ключа для вывода записи на текущий день.

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

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