2013-04-12 3 views
0

Вопрос новичка. Мне нужно найти все записи в моей базе данных, датированные вчерашней датой. Этот столбец является типом DATE.Сравнение даты PHP с MySQL Тип даты

В PHP:

$yesterday = date('Y-m-d', strtotime($Date. ' - 1 day')); 

Это производит '2013-04-11', как и ожидалось. Но когда я пытаюсь

$gamesQuery = mysqli_query($con,"SELECT * FROM scores WHERE home_team = $teamId AND game_date = $yesterday"); 

У меня нет совпадений. В моей базе данных определенно есть запись с game_date = 2013-04-11.

(Я нашел много похожих вопросов SO, но ничего не достаточно, чтобы помочь).

+0

Не '$ con' должен быть на другом конце – samayo

+0

Echo ваш SQL и запустить его непосредственно в базе данных. Вероятно, это проблема с включенными временными метками. – andrewsi

ответ

1

Try:

$gamesQuery = mysqli_query($con,"SELECT * FROM scores WHERE home_team = $teamId AND DATE(game_date) = '{$yesterday}'"); 

Я использую это для множества запросов, связанных с датой mysql.

+0

Это сделало это для меня. Может ли кто-нибудь объяснить, что он делает? –

0

Если поле game_date находится в формате даты и времени, оно не будет соответствовать, потому что значения не идентичны. Используйте DATE(), чтобы сначала извлечь дату, а затем выполнить сравнение.

SELECT * FROM scores WHERE home_team = $teamId AND DATE(game_date) = $yesterday 
+0

Поле - формат DATE. Спасибо, хотя я все равно старался убедиться. –

0

Я думаю, ваша проблема заключается разница в том, как даты используются и хранятся в PHP против MySQL. Попробуйте http://www.richardlord.net/blog/dates-in-php-and-mysql

Это не только даст вам ответ, но научит вас ответ;)

0

Я хотел бы попробовать установить правильный формат, а также:

$yesterday = date('Y-m-d', strtotime($Date. ' - 1 day')); 
$gamesQuery = mysqli_query($con,"SELECT * FROM scores WHERE home_team = ".$teamId." AND date_format(game_date,'%Y-%m-%d') = ".$yesterday); 
+0

Не помогло, но спасибо –

2

Используйте это (только SQL):

SELECT * 
    FROM scores 
WHERE home_team = $teamId 
    AND DATE(game_date) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
Смежные вопросы