Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Помогите сформировать SQL Запрос |

18.04.2010, 18:42
|
|
Новичок
Регистрация: 18.03.2010
Сообщений: 6
Провел на форуме: 72428
Репутация:
0
|
|
Помогите сформировать SQL Запрос
Всем здрасти!
Помогите пожалуйста!
Нужно составить такой запрос:
Код:
SELECT `y`.`id`, `x`.`date`
FROM `x` , `y`
WHERE `x`.`date` < UNIX_TIMESTAMP()
AND `x`.`date` = MAX(`x`.`date`)
AND `x`.`id` = `y`.`id`
Только этот код не правильный, там функцию MAX() в сравнении нельзя применять. Я этот код написал чтобы на примере показать что мне надо.
т.е. из нескольких результатов мне нужно выбрать только один результат, где `x`.`date` максимальное и удовлетворяет условию `x`.`date` < UNIX_TIMESTAMP()
Я знаю что там нужно както через JOIN делать, просьба на ссылки не отправлять, все равно не могу понять как он работает.
Если кто JOIN юзать умеет, напишите плиз на примере моего кода как это нужно сделать.
Спасибо!
|
|
|

18.04.2010, 20:04
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Используйте подзапрос
Код:
AND `x`.`date` = (SELECT MAX(`x`.`date`) FROM `x`)...
|
|
|

18.04.2010, 21:04
|
|
Новичок
Регистрация: 18.03.2010
Сообщений: 6
Провел на форуме: 72428
Репутация:
0
|
|
Сообщение от krypt3r
Используйте подзапрос
Код:
AND `x`.`date` = (SELECT MAX(`x`.`date`) FROM `x`)...
Неа...
Там еще условие `x`.`id` = `y`.`id`
Т.е. результатов может быть несколько
А в подзапросе `x`.`date` = (SELECT MAX(`x`.`date`) FROM `x`)... Возможен только один единственный результат
Значит я не правильный пример показал
Попробую еще раз:
Код:
SELECT `y`.`id`
FROM `x` , `y`
WHERE MAX(`x`.`date`) < UNIX_TIMESTAMP()
AND `x`.`id` = `y`.`id`
Может так будет понятно?
...
Или так?
Код:
SELECT `y`.`id`, `x`.`date`
FROM `x` , `y`
WHERE `x`.`id` = `y`.`id`
Этот запрос возвращает несколько результатов с несколькими значениями `x`.`date` для каждого `y`.`id`
`y`.`id` | `x`.`date`
1 | 1271606772
1 | 1271606723
1 | 1271606847 - максимальное значение `x`.`date` для `y`.`id` = 1
4 | 1271606455
4 | 1271606754 - максимальное значение `x`.`date` для `y`.`id` = 4
Из этих результатов нужно выбрать `x`.`date` который максимальный для этого `y`.`id` и удовлетворяет условию `x`.`date` < UNIX_TIMESTAMP()
если 1271606847 < UNIX_TIMESTAMP() то оно пойдет в результат
если 1271606754 < UNIX_TIMESTAMP() то оно пойдет в результат
Вот такое вот надо както в одном запросе сделать...
|
|
|

18.04.2010, 21:13
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
FROM `x` , `y` - фром сразу из двух таблиц через запятую?)
По русски, без кода, на словах объясни, что тебе нужно, объяснять свои желания на примере "понятного" только тебе кода не есть хорошая идея
|
|
|

18.04.2010, 21:37
|
|
Новичок
Регистрация: 18.03.2010
Сообщений: 6
Провел на форуме: 72428
Репутация:
0
|
|
Сообщение от Pashkela
FROM `x` , `y` - фром сразу из двух таблиц через запятую?)
Да, а что это запрещено?
По русски, без кода, на словах объясни, что тебе нужно, объяснять свои желания на примере "понятного" только тебе кода не есть хорошая идея
Я объснил как мог, и словами и кодом...
|
|
|

18.04.2010, 21:57
|
|
Reservists Of Antichat - Level 6
Регистрация: 19.09.2008
Сообщений: 127
Провел на форуме: 835386
Репутация:
1463
|
|
Код:
SELECT `y`.`id`, `x`.`date`
FROM `x` , `y`
WHERE `x`.`date` in (SELECT MAX(`x`.`date`) FROM `x` WHERE `x`.`date` < UNIX_TIMESTAMP())
AND `x`.`id` = `y`.`id`
или
Код:
SELECT `y`.`id`, `x`.`date`
FROM `x` INNER JOIN `y` ON `x`.`id` = `y`.`id`
WHERE `x`.`date` in (SELECT MAX(`x`.`date`) FROM `x` WHERE `x`.`date` < UNIX_TIMESTAMP())
Последний раз редактировалось nikp; 18.04.2010 в 22:07..
|
|
|

18.04.2010, 22:49
|
|
Новичок
Регистрация: 18.03.2010
Сообщений: 6
Провел на форуме: 72428
Репутация:
0
|
|
Решение найдено!
оно:
Код:
SELECT `y`.`id` , `x`.`date`, MAX( `x`.`date` ) AS `max_date`
FROM `x` , `y`
WHERE `x`.`id` = `y`.`id`
GROUP BY `y`.`id`
HAVING (`max_date` < UNIX_TIMESTAMP())
Всем Спасибо!
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|