[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложенный запрос возвращающий несколько столбцов
proffpoker
Всем привет.
Имеется скрипт, который выводит информацию о пользователе: день рождения и его возраст.
Делаю запрос: "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. Это может влиять на запрос?

Спустя 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` 
FROM `users` AS `u`

Спасибо большое тебе INSIDIOUS, запрос работает хорошо.
И спасибо всем тем, кто попытался мне помочь.

Спустя 22 часа, 19 минут, 34 секунды (23.07.2011 - 10:44) ИНСИ написал(а):
proffpoker сижу и думаю, а зачем там вообще вложенный запрос? Попробуй так:
SELECT `birthDay`, DATEDIFF(YEAR, `birthDay`, NOW()) AS `age` 
FROM `users`

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.