WHERE IN (список дат)

Петр

Новичок
WHERE IN (список дат)

Здравствуйте.

Такая вот конструкция не находит ничего:
[sql]
SELECT user_id, UNIX_TIMESTAMP(created) as created FROM user_pictures WHERE user_id = '3466' AND user_pictures.created in ('2006-04-26 6:22:48', '2006-04-26 6:23:57', '2006-04-26 6:24:31', '2006-04-26 6:27:18')
[/sql]

Но след выборка возвращает результат:
[sql]
SELECT user_id, UNIX_TIMESTAMP(created) as created FROM user_pictures WHERE user_id = '3466' AND user_pictures.created='2006-04-26 6:27:18'
[/sql]

Понимаю что проблема в конструкции WHERE IN (), но в мануале ничего на эту тему не нашел.

created - DATETIME
mySQL - 4.1

Подскажите, где может быть проблема? Неужели WHERE IN не работает с датами ?
Спасибо.
 

Фанат

oncle terrible
Команда форума
что-то мне сомнительно, что след. выборка возвращает результат
 

Петр

Новичок
Автор оригинала: Фанат
что-то мне сомнительно, что след. выборка возвращает результат
Вот данные, user_id - MEDIUMINT

user_id created
3466 2006-04-17 16:44:36
3466 2006-04-17 16:45:12
3466 2006-04-17 16:45:35
3466 2006-04-17 16:49:16
3466 2006-04-26 06:22:48
3466 2006-04-26 06:23:57
3466 2006-04-26 06:24:31
3466 2006-04-26 06:27:18

Стоит ли отнести в разряд "чудо", то что вторая выборка работает верно ?
 

Фанат

oncle terrible
Команда форума
да

-~{}~ 26.04.06 18:47:

можно посмотреть пример запроса и его результат, скопированные сюда из консоли?

-~{}~ 26.04.06 18:57:

Собственно, я именно этого и ожидал.
а не непонятно, к чему относящийся набор данных.
мы, вроде, о запросах говорили, а не о данных.
 

Петр

Новичок
Автор оригинала: Фанат
можно посмотреть пример запроса и его результат, скопированные сюда из консоли?
Конечно:

mysql> SELECT user_id, UNIX_TIMESTAMP( created ) AS created
-> FROM user_pictures
-> WHERE user_id = '3466' AND user_pictures.created = '2006-04-26 6:27:18';
+---------+------------+
| user_id | created |
+---------+------------+
| 3466 | 1146047238 |
+---------+------------+
1 row in set (0.05 sec)

И первый:
mysql> SELECT user_id, UNIX_TIMESTAMP( created ) AS created
-> FROM user_pictures
-> WHERE user_id = '3466' AND user_pictures.created
-> IN (
-> '2006-04-26 6:22:48', '2006-04-26 6:23:57', '2006-04-26 6:24:31', '2006-04-26 6:27:18'
-> );
Empty set (0.00 sec)
 

Фанат

oncle terrible
Команда форума
странно.
я был неправ, предположив, что база не сможет сравнить 1146047238 с '2006-04-26 6:27:18'
однако это у меня на тестовом примере сработало.

Но и с IN сработало тоже:
Код:
select d,unix_timestamp(d) as d from dat 
where d in ('2005-06-07','0000-00-00');
+------------+------------+
| d          | d          |
+------------+------------+
| 2005-06-07 | 1118088000 |
+------------+------------+
1 row in set (0.00 sec)
-~{}~ 26.04.06 19:11:

а штой-то у тебя нету во втором запросе даты из первого?
может, вставить?
 

Петр

Новичок
Автор оригинала: Фанат
а штой-то у тебя нету во втором запросе даты из первого?
может, вставить?
Да нет, есть - последняя в списке.

В твоем тесте ты установил тип d как DATE, попробуй привести к DATETIME, все координально изменится.
(Покрайней мере у меня с DATE тоже работает, но не с DATETIME)

Мне кажется in() глючит с DATETIME.
 

chira

Новичок
Петр

а если нолик добавить к часам
IN (
'2006-04-26 06:22:48', '2006-04-26 06:23:57', '2006-04-26 06:24:31', '2006-04-26 06:27:18')

должно всё координально измениться :)
 

Петр

Новичок
Автор оригинала: chira
Петр

а если нолик добавить к часам
IN (
'2006-04-26 06:22:48', '2006-04-26 06:23:57', '2006-04-26 06:24:31', '2006-04-26 06:27:18')

должно всё координально измениться :)
chira, Фанат Огромное спасибо! Даже смешно стало, - два дня на поиски нуля ! :)
 
Сверху