SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.01.2012 11:15:50

frm
Участник
Зарегистрирован: 27.09.2011
Сообщений: 8

Запрос c join - ми

Друзья помогите кто может.
Представьте себе форум подобный тому на котором мы сейчас сидим. На форуме создаются темы (топики). Вот таблица в которой у меня хранятся темы:


mysql> describe module_forum_topic;
+---------------+----------------------+------+-----+---------+----------------+
| Field         | Type                 | Null | Key | Default | Extra          |
+---------------+----------------------+------+-----+---------+----------------+
| id_topic      | int(11)              | NO   | PRI | NULL    | auto_increment |
| id_subsection | int(11)              | NO   | MUL | NULL    |                |
| id_section    | int(11)              | NO   | MUL | NULL    |                |
| name_topic    | varchar(1500)        | NO   |     | NULL    |                |
| text_topic    | text                 | NO   |     | NULL    |                |
| created       | datetime             | NO   |     | NULL    |                |
| updated       | datetime             | YES  |     | NULL    |                |
| type          | enum('default','ad') | YES  |     | default |                |
| id_user       | int(11)              | NO   | MUL | NULL    |                |
| delete        | enum('Y','N')        | YES  |     | N       |                |
| views         | int(11)              | YES  |     | 0       |                |
+---------------+----------------------+------+-----+---------+----------------+
 

В теме можно писать сообщения (создавать посты), вот моя таблица постов:

mysql> describe module_forum_post;
+---------------+----------+------+-----+---------+----------------+
| Field         | Type     | Null | Key | Default | Extra          |
+---------------+----------+------+-----+---------+----------------+
| id_post       | int(11)  | NO   | PRI | NULL    | auto_increment |
| id_section    | int(11)  | NO   | MUL | NULL    |                |
| id_subsection | int(11)  | NO   | MUL | NULL    |                |
| id_topic      | int(11)  | NO   | MUL | NULL    |                |
| post          | text     | NO   |     | NULL    |                |
| id_user       | int(11)  | NO   | MUL | NULL    |                |
| created       | datetime | NO   |     | NULL    |                |
| updated       | datetime | YES  |     | NULL    |                |
+---------------+----------+------+-----+---------+----------------+
 

Задача следующая: нужно получить список тем с последним сообщением (постом) каждой темы, причем надо учесть что таблица сообщений (постов) может быть пустой, но мне нужно что бы даже в этом случае в результате присутствовали поля  таблицы сообщений(постов).

Неактивен

 

#2 25.01.2012 12:22:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос c join - ми

select ... from (select id_topic, (select max(created) from module_forum_post p where p.id_topic=t.id_topic) as `created`
from module_forum_topic t) t1 left join module_forum_post p1 using(id_topic,created);


Но лучше хранить в таблице тем, информацию о последнем сообщении в теме. Собственно так и делается на всех стандартных форумах, в том числе и этом.

Неактивен

 

#3 25.01.2012 16:11:22

frm
Участник
Зарегистрирован: 27.09.2011
Сообщений: 8

Re: Запрос c join - ми

Спасибо за ответ, да я с вами согласен лучше хранить инфу в самой теме.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson