MySQL выбор конкретных дат для вывода

#php #mysql #sql #datetime #where-clause

#php #mysql #sql #datetime #где-предложение

Вопрос:

Я делаю грубый планировщик встреч для развлечения.

У меня есть страница, на которой будут отображаться доступные встречи.

Я хочу отображать только назначение, которое истекло через 30 дней, иначе месяц и не забронировано, иначе user_id = 0.

У забронированных встреч есть идентификатор пользователя, связанный с их учетной записью.

Я застрял на том, как сообщить MySQL отображать назначение только с датами, которые находятся между сегодняшним днем и месяцем с сегодняшнего дня.

Страница использует PHP и MySQL с использованием PDO.

Мне больше всего нравится PDO, поэтому я его использую.

То, что я рассмотрел, — это DATE_ADD(), CURDATE() ИНТЕРВАЛ, а также то, что у меня есть на странице

 <?php
    //opens database path
    $db = new PDO(DB_PATH, DB_LOGIN, DB_PW);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $today = array(date(Y), date(m), date(d));
    
    $result = $db->query("
SELECT * 
  FROM appt 
 WHERE DAY(date) < $today[3] 
   AND MONTH(date)=today[2] 1 
 ORDER 
    BY date DESC
     , time DESC
");
    foreach($result as $row)
    {
        print "<tr>";
        print "<td><input type='checkbox' name='id[]' value=".$row['id']."></td>";
        print "<td>".$row['date']."</td>";
        print "<td>".$row['time']."</td>";
        print "<td>".$row['doctor']."</td>";
        print "</tr>";
    }
  
  
  
  ?>
  

База данных будет создана как таковая

 CREATE TABLE appts
  (key int unsigned not null auto_increment primary key
  , user_id int unsigned
  , date date
  , time time
  , doctor tinytext);
  

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

1. Рассмотрите возможность хранения даты и времени как единого объекта

2. И посмотрите о внедрении sql и важности подготовленных и связанных запросов

3. @Strawberry Почему это было бы лучше?

Ответ №1:

как сообщить MySQL отображать назначение только с датами, которые находятся между сегодняшним днем и месяцем с сегодняшнего дня?

Вы можете использовать арифметику даты MySQL. Я думаю, вы хотите:

 SELECT * 
FROM appt 
WHERE date >= current_date - interval 1 month
  AND date <  current_date   interval 1 day
ORDER BY date DESC, time DESC
  

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

1. current_date — это функция или переменная, определенная ранее?

2. @user3831093: это встроенная функция MySQL, которая возвращает текущую дату (без учета времени): dev.mysql.com/doc/refman/8.0/en /…