Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ ! / 7 сообщений из 7, страница 1 из 1
05.12.2002, 08:59
    #32075877
amarat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
Привет всем.
Всегда использовал MS SQL Server и проблем не было, но довелось использовать в качестве СУБД MS Access.
Проблема следующая.

Предположим есть три таблицы

1)форум (f)
id
title
2)тема (t)
fid ---> форум, к которому относится тема
id
title
3)сообщения (m)
tid ---> тема, к которой относится сообщение
id
title
date


НЕОБХОДИМО ПОИЗВЕСТИ ТАКУЮ ВЫБОРКУ:
для каждого форума вывести заголовок и дату последнего сообщения в нем (среди всех тем этого форума)

forumtitle lastmessagetitle lastmessagedate

КАК ЭТО СДЕЛАТЬ ???
...
Рейтинг: 0 / 0
05.12.2002, 09:17
    #32075888
sFx
sFx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
а как бы вы сделали на СКле? Вы напишите, а мы подправим текст...
...
Рейтинг: 0 / 0
05.12.2002, 09:51
    #32075908
amarat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
ну хотя бы так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
select
	f.Title,
	lm.Title as LastMessageTitle,
	lm.Date as LastMessageDate
from
	tForum f
left outer join
	tMessage lm on 
	(
		lm.Id = 
			(
				select top  1 
					m.Id
				from
					tMessage m
				where
					m.ThemeId in 
						(
							select
								t.Id
							from
								tTheme t
							where
								t.ForumId =f.Id
						)
				order by
					m.Date desc
			)
	)

tForum - это таблица с форумами
tTheme - таблица с темами
tMessage - соотвественно, с сообщениями
...
Рейтинг: 0 / 0
05.12.2002, 10:02
    #32075913
amarat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
Спасибо всем.
Кажись придумал.
Для быстроты заведу в таблицу форумов дополнительное поле LastMessageId, и буду обновлять его при добавлении сообщений и т.д.
Вообще так делать не рекомендуется, но в этом есть свои плюсы: быстро, просто.
...
Рейтинг: 0 / 0
05.12.2002, 11:39
    #32075989
sFx
sFx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
Приятно когда люди сами думают.
Вот как бы я написал:
Код: plaintext
1.
2.
SELECT TForum.title, tTheme.title, Max(tMessage.msg_date) AS Max_msg_date
FROM tMessage INNER JOIN (tTheme INNER JOIN TForum ON tTheme.fid = TForum.id) ON tMessage.tid = tTheme.id
GROUP BY TForum.title, tTheme.title;
...
Рейтинг: 0 / 0
05.12.2002, 11:44
    #32075993
amarat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
так ведь надо два поля из таблицы tMessage !
так что с max(...) это не верно
...
Рейтинг: 0 / 0
05.12.2002, 12:43
    #32076045
sFx
sFx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
ну тогда так :
Код: plaintext
1.
2.
3.
4.
5.
SELECT TForum.title, tTheme.title, tMessage.title, tMessage.msg_date
FROM (tMessage INNER JOIN tTheme ON tMessage.tid = tTheme.id) INNER JOIN TForum ON tTheme.fid = TForum.id
GROUP BY TForum.title, tTheme.title, tMessage.title, tMessage.msg_date
HAVING (((tMessage.msg_date) In (SELECT Max(tMessage.msg_date) AS Max_msg_date
FROM tMessage INNER JOIN (tTheme INNER JOIN TForum ON tTheme.fid = TForum.id) ON tMessage.tid = tTheme.id
GROUP BY TForum.title, tTheme.title;)));

тут используется подзапрос, который может тормозить при больших объемах
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ ! / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]