Reverent
Новичок
ORDER BY + GROUP BY или как отсортировать результирующие данные
Добрый день уважаемые форумчани.
В данный момент пишу форум, и столкнулся с такой проблемой. У меня есть таблица, которая содержит все темы, соответственно есть таблица, которая содержит все сообщения. Мне нужно вывести все темы и последние сообщение к ним.
Примерно таблицы выглядят так.
Для тем:
CREATE TABLE forumThemes
(
id_forumThemes MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
id_users MEDIUMINT(8) UNSIGNED NOT NULL,
header VARCHAR(100) NOT NULL,
shows MEDIUMINT(8) UNSIGNED,
PRIMARY KEY(id_forumThemes),
INDEX(id_users)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Для сообщений
CREATE TABLE forumMessages
(
id_forumMessages MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
id_forumThemes MEDIUMINT(8) UNSIGNED NOT NULL,
id_users MEDIUMINT(8) UNSIGNED NOT NULL,
message TEXT(5000) NOT NULL,
dateAndTimeAdd DATETIME NOT NULL,
picture MEDIUMBLOB,
picture_format VARCHAR(255),
PRIMARY KEY(id_forumMessages),
INDEX(id_forumThemes),
INDEX(id_users)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Я пишу такую конструкцию:
SELECT forumThemes.header, forumMessages.id_users, forumMessages.dateAndTimeAdd FROM forumThemes, forumMessages WHERE forumThemes.id_forumThemes = forumMessages.id_forumThemes GROUP BY forumMessages.id_forumThemes ORDER BY forumMessages.dateAndTimeAdd DESC;
Но он мне как назло выдает дату не последние сообщение, и не id пользователя который написал последние сообщение, а просто какие-то левые данные. Чувствую возникает сложность в сортировке скомпонованных данных конструкцией GROUP BY. Что мне делать, как по другому написать запрос, что бы получить дату и id пользователя написавшего последние сообщение?
Добрый день уважаемые форумчани.
В данный момент пишу форум, и столкнулся с такой проблемой. У меня есть таблица, которая содержит все темы, соответственно есть таблица, которая содержит все сообщения. Мне нужно вывести все темы и последние сообщение к ним.
Примерно таблицы выглядят так.
Для тем:
CREATE TABLE forumThemes
(
id_forumThemes MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
id_users MEDIUMINT(8) UNSIGNED NOT NULL,
header VARCHAR(100) NOT NULL,
shows MEDIUMINT(8) UNSIGNED,
PRIMARY KEY(id_forumThemes),
INDEX(id_users)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Для сообщений
CREATE TABLE forumMessages
(
id_forumMessages MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
id_forumThemes MEDIUMINT(8) UNSIGNED NOT NULL,
id_users MEDIUMINT(8) UNSIGNED NOT NULL,
message TEXT(5000) NOT NULL,
dateAndTimeAdd DATETIME NOT NULL,
picture MEDIUMBLOB,
picture_format VARCHAR(255),
PRIMARY KEY(id_forumMessages),
INDEX(id_forumThemes),
INDEX(id_users)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Я пишу такую конструкцию:
SELECT forumThemes.header, forumMessages.id_users, forumMessages.dateAndTimeAdd FROM forumThemes, forumMessages WHERE forumThemes.id_forumThemes = forumMessages.id_forumThemes GROUP BY forumMessages.id_forumThemes ORDER BY forumMessages.dateAndTimeAdd DESC;
Но он мне как назло выдает дату не последние сообщение, и не id пользователя который написал последние сообщение, а просто какие-то левые данные. Чувствую возникает сложность в сортировке скомпонованных данных конструкцией GROUP BY. Что мне делать, как по другому написать запрос, что бы получить дату и id пользователя написавшего последние сообщение?