Получить посты за предыдущий "активный" день, кроме сегодняшнего дня

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]

Додумался до такого, вроде бы работает... :)
 

Dl

Новичок
Если я правильно понял, то новости надо вывести за день, предыдущий дню последнего добавления новостей?
Если да, то первое, что приходит на ум.
Предпоследнюю дату поста новости можно узнать так:
[sql]SELECT DATE FROM dle_post
WHERE DATE<(SELECT MAX(DATE) FROM dle_post)
ORDER BY DATE DESC
LIMIT 1[/sql]
Ну и соответственно, если тип поля date, то весь запрос
[sql]SELECT id, title, alt_name, date, category, news_read
FROM dle_post
WHERE category != 23 AND date=(
SELECT DATE FROM dle_post
WHERE DATE<(SELECT MAX(DATE) FROM dle_post)
ORDER BY DATE DESC
LIMIT 1)
ORDER BY news_read DESC
LIMIT 3[/sql]
 

Dreammaker

***=Ф=***
надо вывести за день, предыдущий дню последнего добавления новостей?
Не совсем. :)

Вот сегодня 29.

Если есть новости за 28, то нужно вывести их, если нет, то смотрим были ли за 27, если нет, то за 26 и т.д. То есть, по сути максимальный день не считая сегодняшнего.
 

Dl

Новичок
Ну тогда даже проще)
[sql]SELECT MAX(DATE) DATE FROM dle_post
WHERE DATE<DATE_FORMAT(NOW(), '%Y-%m-%d')[/sql]
 

Dreammaker

***=Ф=***
Dl, ну я так понимаю, что в конце концов всё сведётся к тому запросу, который я соорудил (который в прикленном к первому посту находится) или чему-то похожему.

В прицнипе, он вроде выдаёт то что нужно и сейчас уже это чисто академический интерес, может как-то проще можно :)

update: нет, я там ступил, и Ваш пост как раз в тему :)
update2: нет, я не ступил там. : ) Всё пора спать, утро вечера мудренее...

-~{}~ 29.10.08 23:25:

Спасибо, всем за помощь.
 
Сверху