[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Необходимо выполнить сложный запрос в MySQL
Somoss
Имеется 2 таблицы.

table1
Код

id       time
01       45
02       23
03       14
04       67
05       04
06       15
07       09


table2
Код

id       field1       field2
01       som1         moloko
02       som2         moloko
03       som3         moloko
04       ...          smetana
05       ...          smetana
06       ...          kefir
07       ...          kefir


Необходимо выбрать из таблицы table2 из группы записей с одинаковым field2 поле field1 при таком условии, что table2.id будет соответствовать table1.id записи с максимальным значением time из той самой группы таблицы table2. Таблицы связаны по ID.

То есть в этом примере я должен получить на выходе som1, т.к. мне надо из группы с полем moloko взять field1 записи с таким ID, что в таблице table1 он будет соответствовать максимальному полю time этой же группы.

Сложно было объяснить. Надеюсь поймёте.



Спустя 36 минут, 21 секунда (18.06.2009 - 17:08) sergeiss написал(а):
Я тут "помедитировал" немного smile.gif и получил вот такой результат. Я его не проверял, но он должен быть рабочий.

Сорри, удалил код, т.к. он не совсем правильный. Сейчас еще подумаю...

Спустя 10 минут, 44 секунды (18.06.2009 - 17:19) sergeiss написал(а):
Вроде как вот так вот:
SQL
select * from `table2` where `id` = (
select `id`
from `table1` where `id` in (select `id` from `table2` where `field2`='moloko')
order by `time` desc limit 1
)

То есть, сначала находим список АйДи, которые удовлетворяют условию равенства поле2=молоко. Затем находим тот из них, т.е. этих АйДи, к которого максимальное время в первой таблице. Делаем это просто: выводим список АйДи, сортируем по времени (в обратном порядке), и берем первую строчку.
И, наконец, полученный АйДи используем для выборки во второй таблице.

Спустя 38 минут, 22 секунды (18.06.2009 - 17:57) Somoss написал(а):
Спасибо большое за помощь.
Но немного не так поняли суть.

TABLE 1
id time
01 45
02 23
03 14

04 67
05 04
06 15
07 09

TABLE 2
id field1 field2
01 som1 moloko
02 som2 moloko
03 som3 moloko

04 ... smetana
05 ... smetana
06 ... kefir
07 ... kefir

Выделенные жирным элементы связаны. У записей одинаковые ID.
И мне нужно field1 из table2, у которого ID такой же как у записи с максимальным time соответствующей группы.
В данном случае..
В table1 у записи 1 максимальное значение из группы. Поэтому беру field1 у первой записи из table2.

Спустя 37 минут, 50 секунд (18.06.2009 - 18:35) sergeiss написал(а):
Цитата (Somoss @ 18.06.2009 - 18:57)
Спасибо большое за помощь.
Но немного не так поняли суть.

Я именно так и понял smile.gif И я даже создал тестовую БД, где мой запрос великолепно работает.

Спустя 14 часов, 7 минут, 59 секунд (19.06.2009 - 08:43) Somoss написал(а):
Понял. Спасибо ещё раз, сейчас у себя разберусь =)

P.S. работает! супер!
Быстрый ответ:

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