2014-09-12 2 views
0

Я пытаюсь выбрать данные из базы данных mySQL, которая была вставлена ​​сегодня, однако этот запрос работает, но возвращает 0 результатов. В моей базе данных есть одна строка, которая должна быть возвращена. Любая помощь очень ценится! Благодаря!база данных дата = сегодняшняя дата

$ sql = "SELECT * FROM main_table WHERE DATE (date) = CURDATE()";

+0

что в вашем поле базы данных? Поделитесь этим и результатом запроса. –

+0

Какой тип поля 'date' в вашей таблице? – Ghost

+0

Одной из больших проблем в этом заявлении является пространство между именем функции и начальным парой. Между ними не должно быть пробелов. Ссылка: [http://dev.mysql.com/doc/refman/5.0/en/function-resolution.html](http://dev.mysql.com/doc/refman/5.0/en/function-resolution. HTML). Также обратите внимание, что перенос столбца в функцию отключает способность MySQL эффективно использовать индекс для удовлетворения запроса. Мы предпочитаем ссылаться на «голый» столбец и делать любые искажения на постоянной (оцененной один раз) стороне, даже если это означает выполнение двух сравнений для сканирования диапазона. – spencer7593

ответ

2

Это действительно зависит от фактического типа данных столбца date в main_table, как определяется этот столбец и что хранится в этом столбце.

Если столбец MySQL DATE тип данных, то

WHERE date = DATE(NOW()) 

Если столбец DATETIME или TIMESTAMP тип данных, а затем

WHERE date >= DATE(NOW()) AND date < DATE(NOW()) + INTERVAL 1 DAY 

Если столбец CHAR или VARCHAR, то это зависит от того, фактические значения сохранены. Если это хранится в формате «мм/дд/гггг» - то есть две цифры месяца и две цифры дня (с лидирующим нулем) и четырех цифр года, разделенных косой чертой - то

WHERE date = DATE_FORMAT(NOW(),'%m/%d/%Y') 
0

Либо вы можете использовать прямой MySQL функция даты или PHP functions..Now Я использую функцию PHP

$today = date('Y-m-d'); //To get the Current date as 2014-10-12 

$sql = "SELECT * FROM main_table WHERE `date` = '$today'"; 

поскольку ваше имя столбца является датой (То же, что и DATE функции в SQL) использовать date ..``

+0

Верно, что зарезервированные слова MySQL, используемые в качестве идентификаторов, должны быть экранированы либо путем их включения в обратные вызовы, либо с их квалификацией с именем таблицы или псевдонимом таблицы. Но ** DATE' ** не находится в [** Список зарезервированных слов MySQL **] (http://dev.mysql.com/doc/refman/5.5/ru/reserved-words.html). Эффективность этого запроса для возврата указанных строк действительно зависит от фактического типа данных столбца 'date' в' main_table' и какие значения фактически хранятся.Если 'date' - это тип данных MySQL DATE, то сравнение соответствия с строковым литералом в формате« YYYY-MM-DD »было бы подходящим. – spencer7593

3

Я рекомендую что, если вам не нужна информация о milisecond, вы всегда храните дату informa в Unix Timestamp. Он легче хранить, поскольку он является только целочисленным значением, быстрее восстанавливается и универсален, поскольку он всегда основан на UTC.

Специально на PHP, преобразуя информацию о дате в (time() и strtotime), а также с (date()) временная отметка unix довольно проста. Таким образом, независимо от того, где находится ваш пользователь, вы всегда можете показывать правильную информацию в местное время практически без усилий.

В вашем случае вы можете рассчитать де временную метку на сегодня 0 часов утра сегодня 12 вечера, а затем искать его в MySQL как:

$sql = "SELECT * FROM main_table WHERE `date`>{$dayStart}" AND `date`<{$dayEnd};

Смежные вопросы