Dreammaker
***=Ф=***
Получить посты за предыдущий "активный" день, кроме сегодняшнего дня
Есть новости, данные в поле date храняться в DATE формате. (CMS DLE, это так к слову, но проблема общего характера).
Нужно получить тройку постов с наибольшим количеством просмотров, которые были размещены в последний предыдущий день, когда было размещение новостей. То есть, не обращаем внимания были ли сегодня размещены новости, а смотрим, если есть новости за вчера, то смотрим за вчера, если вчера не было, а были позавчера, то за позавчера и т.д.
Если только за вчера, то вроде бы ничего сложного:
[sql]
SELECT id, title, alt_name, date, category FROM dle_post where category != 23 and date<curdate() and date>DATE_ADD(CURDATE(), INTERVAL -1 DAY) ORDER BY news_read desc LIMIT 3
[/sql]
Но если учитывать и предыдущие дни, то тут со мной случился затык, ничего в голову не приходит - привык хранить время в unixstamp. Прошу помощи.
-~{}~ 29.10.08 22:39:
[sql]
SELECT id, title, alt_name, date, category, news_read
FROM dle_post
WHERE category !=23
AND date < CURDATE( )
AND date > DATE_ADD( (
SELECT DATE_FORMAT( MAX( date ) , '%Y-%m-%d 00:00:00' )
FROM dle_post
WHERE date < CURDATE( ) ) , INTERVAL -1
DAY
)
ORDER BY news_read DESC
LIMIT 3
[/sql]
Додумался до такого, вроде бы работает...
Есть новости, данные в поле date храняться в DATE формате. (CMS DLE, это так к слову, но проблема общего характера).
Нужно получить тройку постов с наибольшим количеством просмотров, которые были размещены в последний предыдущий день, когда было размещение новостей. То есть, не обращаем внимания были ли сегодня размещены новости, а смотрим, если есть новости за вчера, то смотрим за вчера, если вчера не было, а были позавчера, то за позавчера и т.д.
Если только за вчера, то вроде бы ничего сложного:
[sql]
SELECT id, title, alt_name, date, category FROM dle_post where category != 23 and date<curdate() and date>DATE_ADD(CURDATE(), INTERVAL -1 DAY) ORDER BY news_read desc LIMIT 3
[/sql]
Но если учитывать и предыдущие дни, то тут со мной случился затык, ничего в голову не приходит - привык хранить время в unixstamp. Прошу помощи.
-~{}~ 29.10.08 22:39:
[sql]
SELECT id, title, alt_name, date, category, news_read
FROM dle_post
WHERE category !=23
AND date < CURDATE( )
AND date > DATE_ADD( (
SELECT DATE_FORMAT( MAX( date ) , '%Y-%m-%d 00:00:00' )
FROM dle_post
WHERE date < CURDATE( ) ) , INTERVAL -1
DAY
)
ORDER BY news_read DESC
LIMIT 3
[/sql]
Додумался до такого, вроде бы работает...
