Имеется скрипт, который выводит информацию о пользователе: день рождения и его возраст.
Делаю запрос: "SELECT birthDay, TIMESTAMPDIFF(YEAR, (SELECT birthDay FROM users), CURDATE()) AS age FROM users".
Я выбираю из таблицы users день рождения юзера(birthDay) и его возраст(age) .
TIMESTAMPDIFF(YEAR, (SELECT birthDay FROM users), CURDATE) AS age - возраст пользователя. Я нахожу разницу в годах между днем рождения пользователя и настоящим временем.
Но MySQL выводит ошибку: "Вложенный запрос возвращает более одной строки". Как мне это исправить? Или хотя бы подскажите как можно узнать возраст юзера.
Заранее спасибо!
Спустя 14 минут, 44 секунды (21.07.2011 - 21:12) Winston написал(а):
Цитата (proffpoker @ 21.07.2011 - 20:57) |
Вложенный запрос возвращает более одной строки |
Больше одной строки, это одинаковые строки возвращаются ?
Спустя 9 минут, 39 секунд (21.07.2011 - 21:21) waldicom написал(а):
SELECT birthDay FROM users- этот запрос возвращает все строки из таблицы users. А так как этот подзапрос вызывается в SELECT, то он может возвращать только одно поле.
Узнать надо для определенного пользователя или для всех сразу?
Спустя 4 минуты, 29 секунд (21.07.2011 - 21:26) proffpoker написал(а):
Цитата (waldicom @ 21.07.2011 - 18:21) |
SELECT birthDay FROM users- этот запрос возвращает все строки из таблицы users. А так как этот подзапрос вызывается в SELECT, то он может возвращать только одно поле. Узнать надо для определенного пользователя или для всех сразу? |
Для всех сразу.
Спустя 4 минуты, 45 секунд (21.07.2011 - 21:31) ИНСИ написал(а):
proffpoker попробуй так:
SELECT TIMESTAMPDIFF(YEAR, (SELECT `birthDay` FROM `users` WHERE `id` = `u`.`id`), CURDATE()) AS `age`
FROM `users` AS `u`
Спустя 22 минуты, 35 секунд (21.07.2011 - 21:53) proffpoker написал(а):
Выводит NULL.
Я тут проверил, запись birthDay выводит формат даты как dd-mm-yyyy,
а CURDATE() как yyyy-mm-dd. Это может влиять на запрос?
Я тут проверил, запись birthDay выводит формат даты как dd-mm-yyyy,
а CURDATE() как yyyy-mm-dd. Это может влиять на запрос?
Спустя 39 минут, 8 секунд (21.07.2011 - 22:32) ИНСИ написал(а):
proffpoker Попробуй так:
SELECT DATEDIFF(YEAR, (SELECT `birthDay` FROM `users` WHERE `id` = `u`.`id`), NOW()) AS `age`
FROM `users` AS `u`
Спустя 13 часов, 52 минуты, 17 секунд (22.07.2011 - 12:25) proffpoker написал(а):
Цитата (INSIDIOUS @ 21.07.2011 - 18:31) |
proffpoker попробуй так:SELECT TIMESTAMPDIFF(YEAR, (SELECT `birthDay` FROM `users` WHERE `id` = `u`.`id`), CURDATE()) AS `age` |
Спасибо большое тебе INSIDIOUS, запрос работает хорошо.
И спасибо всем тем, кто попытался мне помочь.
Спустя 22 часа, 19 минут, 34 секунды (23.07.2011 - 10:44) ИНСИ написал(а):
proffpoker сижу и думаю, а зачем там вообще вложенный запрос? Попробуй так:
SELECT `birthDay`, DATEDIFF(YEAR, `birthDay`, NOW()) AS `age`
FROM `users`