HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Помогите сформировать SQL Запрос
  #1  
Старый 18.04.2010, 18:42
drLex
Новичок
Регистрация: 18.03.2010
Сообщений: 6
С нами: 8501390

Репутация: 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 юзать умеет, напишите плиз на примере моего кода как это нужно сделать.

Спасибо!
 
Ответить с цитированием

  #2  
Старый 18.04.2010, 20:04
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами: 10021597

Репутация: 905


По умолчанию

Используйте подзапрос
Код:
AND `x`.`date` = (SELECT MAX(`x`.`date`) FROM `x`)...
 
Ответить с цитированием

  #3  
Старый 18.04.2010, 21:04
drLex
Новичок
Регистрация: 18.03.2010
Сообщений: 6
С нами: 8501390

Репутация: 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() то оно пойдет в результат

Вот такое вот надо както в одном запросе сделать...
 
Ответить с цитированием

  #4  
Старый 18.04.2010, 21:13
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

FROM `x` , `y` - фром сразу из двух таблиц через запятую?)

По русски, без кода, на словах объясни, что тебе нужно, объяснять свои желания на примере "понятного" только тебе кода не есть хорошая идея
 
Ответить с цитированием

  #5  
Старый 18.04.2010, 21:37
drLex
Новичок
Регистрация: 18.03.2010
Сообщений: 6
С нами: 8501390

Репутация: 0
По умолчанию

Цитата:
Сообщение от Pashkela  
FROM `x` , `y` - фром сразу из двух таблиц через запятую?)
Да, а что это запрещено?
Цитата:
По русски, без кода, на словах объясни, что тебе нужно, объяснять свои желания на примере "понятного" только тебе кода не есть хорошая идея
Я объснил как мог, и словами и кодом...
 
Ответить с цитированием

  #6  
Старый 18.04.2010, 21:57
nikp
Reservists Of Antichat - Level 6
Регистрация: 19.09.2008
Сообщений: 127
С нами: 9285506

Репутация: 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..
 
Ответить с цитированием

  #7  
Старый 18.04.2010, 22:49
drLex
Новичок
Регистрация: 18.03.2010
Сообщений: 6
С нами: 8501390

Репутация: 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)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.