2013-04-16 2 views
3

Хотелось бы, чтобы пользователь мог видеть свою фотографию сегодня, загруженную на страницу профиля.MySQL Текущая дата

Это правильно?

SELECT * FROM pictures 
WHERE userid = '$userid' 
ORDER BY pictureuploaddate < DATE_ADD(NOW(), INTERVAL 1 DAY); 

Все еще не работает. Спасибо за помощь.

ответ

2

Вы бы получить что-то вроде:

SELECT * 
FROM pictures 
WHERE userid = '$userid' AND 
     DATE(pictureuploaddate) = CURDATE() # Match date without time 
ORDER BY pictureuploaddate DESC 

Почему вы ORDER BY и использовать = в нем? Это должно быть на сегодняшний день, просто добавьте его в ГДЕ. Если вы хотите получить самую последнюю фотографию сначала, вы можете ORDER BY pictureuploaddate DESC

Также лучше сравнить даты, а не меньше, чем если бы вы хотели, чтобы текущая дата. Потому что это быстрее.

+0

Superb! Благодарю. – user2279205

+2

'DATE (pictureuploaddate) = CURDATE()' не будет использовать индекс. Лучше делать 'pictureuploaddate BETWEEN CURDATE() И CURDATE() + INTERVAL 86399 SECOND' –

+1

Я не знаю, имеет ли он индекс в pictureuploaddate, если нет, это быстрее. – Niels

2

Это прикажет булевским результат сравнения:

ORDER BY pictureuploaddate < DATE_ADD(NOW(), INTERVAL 1 DAY) 

Я предполагаю, что вы хотите сравнения в предложении WHERE:

WHERE userid = '$userid' 
AND pictureuploaddate BETWEEN CURDATE() AND CURDATE() + INTERVAL 86399 SECOND 
ORDER BY pictureuploaddate DESC 
1

Вы теперь пытаетесь упорядочить результаты по выходному булевому тесту на дату. Добавление этой части в предложение WHERE имеет больше смысла.

2

Я знаю, что вы выбрали ответ уже, но, чтобы избежать путаницы с загрузки нескольких в тот же день, вы могли бы также сделать:

SELECT * 
FROM pictures 
WHERE userid = '$userid' 
ORDER BY pictureuploaddate DESC 
LIMIT 1; 
Смежные вопросы