@rusgayfer

Как вывести из базы количество строк за сегодня PHP 7.0?

Нужно вывести из базы количество строк за сегодня. В базе есть столбец datetime там дата в формате 2017-08-02 11:33:40

$dateday = date("Y-m-d");

// Вывод количество строк
$stmm = $db->dbStream->prepare("SELECT COUNT(*) FROM `news` WHERE `datetime` = ?");
$stmm->bindValue(1, $dateday, PDO::PARAM_STR);

try {
    $stmm->execute();
} catch (PDOException $error) {
    trigger_error("Ошибка при работе с базой данных: {$error}");
}

$alls = $stmm->fetch(PDO::FETCH_ASSOC);
$all = implode(",", $alls);
$all = $all;


Мок код не работает все время показывает 0, как исправить?
  • Вопрос задан
  • 334 просмотра
Решения вопроса 1
GeneMoss
@GeneMoss
void
Если база ненагруженная, то так:
SELECT COUNT(*) FROM `news` WHERE DATE(`datetime`) = CURRENT_DATE();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Сравнение datetime со строкой приводит строку к типу datetime, отсутствующее время считается полночью. Т.е. получается условие
`datetime` = '2017-08-02 00:00:00'
Видимо, у вас таких строк нет, поэтому и 0.
Для сравнения даты без учёта времени нужен поиск по диапазону от полуночи до следующей полуночи. Например
`datetime` >= ? and `datetime` < ? + interval 1 day


Другие варианты условий через функции преобразования datetime вроде `DATE(datetime) = ?` возможны, но не могут использовать индексы для ускорения поиска, даже если казалось бы подходящий индекс по datetime есть.
Ответ написан
Комментировать
@BorisKorobkov Куратор тега PHP
Web developer
... DATE(datetime) = ?
https://dev.mysql.com/doc/refman/5.7/en/date-and-t...

Update:
Вышеуказанный код неэффективен. Лучше:
... datetime >= ?
Ответ написан
Ваш ответ на вопрос

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

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