Фильтр данных из базы данных с помощью SQL

#mysql #sql #database

#mysql #sql #База данных

Вопрос:

Я хочу отфильтровать определенный набор данных из базы данных с помощью SQL в соответствии с датой его выпуска, да, я разрабатываю сайт с фильмами. Я хочу получить те данные, которые в будущем появятся вверху в порядке возрастания, затем прошлые данные, я имею в виду выпущенные данные в порядке убывания, и я получил это с помощью сообщества StackOverflow. Но, похоже, у меня возникла другая проблема, я хочу, чтобы данные, срок выпуска которых истек, оставались лучшими в течение первых 15 дней, затем следуйте моему правилу, о котором я сказал вначале.

Структура моей таблицы:

 CREATE TABLE `movies` (
  `id` int(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `imdbID` varchar(255) NOT NULL,
  `poster` varchar(255) NOT NULL,
  `year` varchar(255) NOT NULL,
  `rel_date` date NOT NULL,
  `main_menu_id` int(255) NOT NULL
)

--
ALTER TABLE `movies`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `movies`
  MODIFY `id` int(255) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=131;
COMMIT;
  

Я использовал это, чтобы сохранить предстоящие данные вверху в порядке возрастания, а затем выпустил данные в порядке убывания по rel_date

 SELECT t.* FROM movies t 
where main_menu_id=".$menu_id." 
ORDER BY 
DATE(t.rel_date) >= DATE(NOW()) DESC , 
IF(DATE(t.rel_date)<DATE(NOW()),t.rel_date,DATE(NULL)) DESC ,
 t.rel_date ASC 
  

Теперь я ожидаю, что выпущенные данные останутся на вершине в течение первых 15 дней, затем следуйте моему последнему коду.
Я знаю, что это было ужасное описание, потому что это мой первый пост. Извините за это.

Комментарии:

1. Есть ли в MySQL функция добавления даты, которую вы можете использовать для достижения этой цели?

2. Да, это так, но это не дает мне желаемого результата, я хочу, чтобы опубликованные данные были размещены вверху в первые 15 дней.

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

4. Я не силен в подзапросе, можете ли вы, пожалуйста, помочь мне

Ответ №1:

Я создал этот код в Postgresql, но вам нужно преобразовать функцию now () в mysql.

 create table test ( id serial, release date );

insert into test (release) values ( to_date('01/04/2019', 'dd-mm-yyyy') );
insert into test (release) values ( to_date('02/04/2019', 'dd-mm-yyyy') );
insert into test (release) values ( to_date('03/04/2019', 'dd-mm-yyyy') );

insert into test (release) values ( to_date('15/04/2019', 'dd-mm-yyyy') );
insert into test (release) values ( to_date('16/04/2019', 'dd-mm-yyyy') );
insert into test (release) values ( to_date('17/04/2019', 'dd-mm-yyyy') );


select
    release
from (
(
select
    0 priority,
    release
from test
where
    release >= (now() - INTERVAL '15 DAY')::date
)
union
(
select
    1 priority,
    release
from test
where
    release < (now() - INTERVAL '15 DAY')::date
)) foo
order by
    priority;