powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Последний пост в топике форума в спике топиков
7 сообщений из 7, страница 1 из 1
Последний пост в топике форума в спике топиков
    #33449601
Форум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть минифорум:
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
# MySQL-Front Dump  2 . 5 
#
# Host: localhost   Database: test
# --------------------------------------------------------
# Server version  4 . 0 . 18 -max-nt

USE test;


#
# Table structure for table 'forum'
#

DROP TABLE IF EXISTS `forum`;
CREATE TABLE `forum` (
  `frm_id` int( 10 ) unsigned NOT NULL auto_increment,
  `frm_name` varchar( 120 ) NOT NULL default '',
  `frm_site_name` varchar( 64 ) default NULL,
  `frm_descr` text,
  `frm_order` int( 4 ) unsigned NOT NULL default '0',
  PRIMARY KEY  (`frm_id`),
  KEY `frm_site_name_idx` (`frm_site_name`)
) TYPE=MyISAM;



#
# Dumping data for table 'forum'
#

INSERT INTO `forum` (`frm_id`, `frm_name`, `frm_site_name`, `frm_descr`, `frm_order`) VALUES("1", "Форум 1", "forum_1", "Описание форума 1", "1");


#
# Table structure for table 'post'
#

DROP TABLE IF EXISTS `post`;
CREATE TABLE `post` (
  `pst_id` int( 10 ) unsigned NOT NULL auto_increment,
  `tpc_id` int( 10 ) unsigned default NULL,
  `pst_name` varchar( 255 ) default NULL,
  `pst_body` text,
  `pst_date` datetime default NULL,
  `usr_id` int( 10 ) unsigned default NULL,
  `pst_author` varchar( 32 ) default NULL,
  `pst_ip` bigint( 16 ) default NULL,
  PRIMARY KEY  (`pst_id`),
  KEY `usr_id_idx` (`usr_id`),
  KEY `tpc_id_idx` (`tpc_id`)
) TYPE=MyISAM;



#
# Dumping data for table 'post'
#

INSERT INTO `post` (`pst_id`, `tpc_id`, `pst_name`, `pst_body`, `pst_date`, `usr_id`, `pst_author`, `pst_ip`) VALUES("1", "1", NULL, NULL, "2005-11-11 11:11:11", "1", NULL, NULL);
INSERT INTO `post` (`pst_id`, `tpc_id`, `pst_name`, `pst_body`, `pst_date`, `usr_id`, `pst_author`, `pst_ip`) VALUES("2", "1", NULL, NULL, "2005-11-11 11:11:22", "1", NULL, NULL);
INSERT INTO `post` (`pst_id`, `tpc_id`, `pst_name`, `pst_body`, `pst_date`, `usr_id`, `pst_author`, `pst_ip`) VALUES("3", "2", NULL, NULL, "2005-12-12 12:12:12", "1", NULL, NULL);
INSERT INTO `post` (`pst_id`, `tpc_id`, `pst_name`, `pst_body`, `pst_date`, `usr_id`, `pst_author`, `pst_ip`) VALUES("4", "1", NULL, NULL, "2005-12-12 12:12:20", "1", NULL, NULL);


#
# Table structure for table 'topic'
#

DROP TABLE IF EXISTS `topic`;
CREATE TABLE `topic` (
  `tpc_id` int( 10 ) unsigned NOT NULL auto_increment,
  `frm_id` int( 10 ) unsigned NOT NULL default '0',
  `tpc_name` varchar( 255 ) default NULL,
  `tpc_date` datetime default NULL,
  `usr_id` int( 10 ) unsigned default NULL,
  `tpc_usr_name` varchar( 255 ) default NULL,
  `tpc_is_hide` tinyint( 1 ) unsigned default '0',
  `tpc_cnt_view` int( 10 ) unsigned default '1',
  `tpc_cnt_answer` int( 10 ) unsigned default '0',
  `tpc_is_sticky` tinyint( 1 ) unsigned default '0',
  PRIMARY KEY  (`tpc_id`),
  KEY `frm_id_idx` (`frm_id`),
  KEY `usr_id_idx` (`usr_id`)
) TYPE=MyISAM;



#
# Dumping data for table 'topic'
#

INSERT INTO `topic` (`tpc_id`, `frm_id`, `tpc_name`, `tpc_date`, `usr_id`, `tpc_usr_name`, `tpc_is_hide`, `tpc_cnt_view`, `tpc_cnt_answer`, `tpc_is_sticky`) VALUES("1", "1", "Топик 1", "2005-11-11 11:11:11", "1", NULL, "0", "1", "0", "0");
INSERT INTO `topic` (`tpc_id`, `frm_id`, `tpc_name`, `tpc_date`, `usr_id`, `tpc_usr_name`, `tpc_is_hide`, `tpc_cnt_view`, `tpc_cnt_answer`, `tpc_is_sticky`) VALUES("2", "1", "Топик 2", "2005-12-12 12:12:12", "1", NULL, "0", "1", "0", "0");

думаю, как решить вопрос:
при выводе всех топиков чтобы можно было рядом с ними получать еще и дату и автора последнего поста в каждом топике.
Естественно хочется ОДНИМ запросом...
Как это сделать двумя догадываюсь :)
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33449639
Форум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
SELECT usr.usr_name,frm.frm_name, tpc.*  from port_topic tpc
      inner join port_forum frm on frm.frm_id=tpc.frm_id
      left join users usr on usr.usr_id=tpc.usr_id
      where  1 = 1   AND frm.frm_site_name='dial-up' AND  (tpc_is_hide= 0  or tpc.usr_id= 0 ) 
      order by tpc_is_sticky desc, tpc_date desc
пока есть только вывод топиков и количество постов в каждом топике
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33449694
Форум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самым простым и эффективным способом мне почему то видится помещение идентификатора последнего поста для каждой записи в таблице топиков.
Может это от незнания.
Небольшая денормализация, зато выигрыш ощутимый...

Вот в MS Access есть функция в SQL-диалекте, которая называется LAST()
Ее не хватает мне для удобства
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33449862
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. А ORDER BY field DESC LIMIT 1 эту функцию не заменяет?
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33451729
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только если подзапросом: ему ведь надо получить целый список топиков и у каждого по последнему сообщению. Тут действительно нужна денормализация.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33452031
Форум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем сделал кэширование идентификатора последнего поста для темы и форума.
Только при добавлении новой темы или поста они изменяются и директивно для всех форумов и топиков еще в админке обновляется кэш.

Немного денормализовал, но работать стало намного быстрее.

Всем спасибо!
Вопрос решился сам собой!
...
Рейтинг: 0 / 0
Последний пост в топике форума в спике топиков
    #33452040
Форум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати забыл сказать еще:
сейчас у меня последний отвеченный топик поднимается в списке тем форума не по дате поста, а по тому самому идентификатору, закэшированному в таблице тем форума.

Ведь все равно чем больше этот идентификатор, тем свежее дата ответа, так?
А обращаться к таблице постов уже не надо.

Тоже послабление для мускула.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Последний пост в топике форума в спике топиков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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