powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
7 сообщений из 7, страница 1 из 1
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075877
amarat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
Всегда использовал 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
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075888
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как бы вы сделали на СКле? Вы напишите, а мы подправим текст...
...
Рейтинг: 0 / 0
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075908
amarat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну хотя бы так:
Код: 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
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075913
amarat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Кажись придумал.
Для быстроты заведу в таблицу форумов дополнительное поле LastMessageId, и буду обновлять его при добавлении сообщений и т.д.
Вообще так делать не рекомендуется, но в этом есть свои плюсы: быстро, просто.
...
Рейтинг: 0 / 0
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075989
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приятно когда люди сами думают.
Вот как бы я написал:
Код: 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
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32075993
amarat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так ведь надо два поля из таблицы tMessage !
так что с max(...) это не верно
...
Рейтинг: 0 / 0
SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
    #32076045
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда так :
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SELECT из трех таблиц. как сделать ??? ПОМОГИТЕ !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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