Архивные/актуальные новости. MySQL

Poster

Новичок
Архивные/актуальные новости. MySQL

Ребята, есть такая задача.

Сайт, н о в о с т и.
Актуальные и "архивные". Под "архивной" новостью подразумеваетя новость устаревшая по дате или если ей вручную поставлена пометка "архивная".

То есть в архив новость может перемещаться двумя способами:
1. истек срок, после которого новость автоматически перемещается в архив
2. новости принудительно поставлена пометка "архивная"

Первое условие легко выполнимо:
Неархивные:
SELECT * FROM news WHERE DATEDIFF(CURDATE(), date) <= 25;

Архивные:
SELECT * FROM news WHERE DATEDIFF(CURDATE(), date) > 25;

25 - количество дней, по истечении количества которых новость перемещается в архив.


Или же второе условие - если новости вручную поставлено "Архивная":
SELECT * FROM news WHERE archive = 'y';

Указание вручную "Архивная" является _приоритетным_ перед "архивированием" новости "по дате".

Теперь сформулирую вопрос.

Как соединить два запроса - отбор по дате и вручную так чтобы
- если новость "архивна" по дате, то ее можно "вытащить" из архива вручную, то есть невзирая на разницу дат?

у меня пока вот что думается, но криво это,
ВЫборка НЕархивных:
PHP:
$arch = "AND (archive = 'n' OR DATEDIFF(CURDATE(), date) <= 25)";
- гуд, выборка правильая.

Архивные:
PHP:
$arch = "AND (archive = 'y' OR DATEDIFF(CURDATE(), date) > 25)";
но тогда ручная архивность не имеет приоритета...


Спасибо всем кто дочитал и вник.
 

SunDrop

Помощник поисков. робота
Что ты имеешь в виду под приоритетом? Порядок следования? Тогда:
ORDER BY archive, date

Идею уловил?
 

Poster

Новичок
нет-нет. не порядок следования.
Допустим, новость "состарилась", через 25 дней после добавления и она не попадает в результат запроса ...DATEDIFF(CURDATE(), date) <= 25.

НО ей можно поставить вручную archive='n' и она должна попасть в результат запроса немотря на старость по дате.
 

Фанат

oncle terrible
Команда форума
SunDrop
исправь свой неграмотный статус, чувачек.
и не пиши в этот топик больше.
 

hermit_refined

Отшельник
Poster
Вы специально так написали, чтобы всех и заодно себя запутать?
Для старости по времени у вас 2 варианта.
Для пометки - сколько? две ('y' и 'n') или три (ещё и null) ?

Следовательно, вы имеете всего либо 4, либо 6 вариантов - составьте таблицу истинности и поймёте, какие логические выражения вам необходимо использовать.
 
Сверху