AllDecay
@AllDecay
Вечно отдыхающий.

Не проверяется DATEDIFF MySQL. Как исправить?

Почти дописал свой обработчик для репостов ВКонтакте и опять столкнулся с некой проблемой. По условию, нужно выполнить репост только тогда, когда разница между текущим и временем репоста больше 7 дней. Вот код:
// в условии сразу смотрим на дату последнего репоста
            $query = "SELECT COUNT (*) FROM `reposts` WHERE `id` = :id IF DATEDIFF (CURDATE(), `date`) < 7";
			$class->connectdb($db_name, $db_user, $db_pass);
            $sth = $class->db->prepare($query);
            $sth->execute(
			array(
                ":id" => $postinfo[0]
				)
			);
            $result = $sth->fetchAll();
           
            //если записей нет - постим
            if (!count($result)) {
                $response = $class->post($url);
                if ($response->success == 1) {
                    $link = "https://vk.com/wall-100562658_" . $response->post_id;
                    $class->addPost($postinfo, $url, $post);
                    $this->status = "ok";
                    $this->setResponse("redirect", ".");
                    $this->message = sprintf("Репост сделан! Проверить его наличие Вы можете по этой ссылке: %s", $link);
                    } else {
                    $this->setFieldError("err", "Ошибка! Сервер ВКонтакте вернул ответ с кодом ошибки: ". $response->error->error_code);
                    return;
                }
                } else {
                $this->setFieldError("err", "Сожалеем, но мы уже делали с Вами репост на этой неделе.");
                return;
            }

Либо он не проверяет даты, либо с условиями что-то не так, ибо репосты выполняются даже если разница дат меньше 7 дней.
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
IF не нужен. Нужно правильно составленное условие во WHERE.
DATEDIFF тоже не нужен. Использование колонки внутри любой функции отключает индекс по этой колонке. Лучше `date` < CURDATE() - INTERVAL 7 DAY
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы