#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;