2013-08-01 2 views
2

готовят запрос SQL, чтобы получить наиболее актуальные темы простого форума, и у меня есть следующее положение:Получить 10 последнее сообщение

CREATE TABLE IF NOT EXISTS `f_categoria` (
    `id_categoria` int(4) NOT NULL, 
    `name` varchar(20) NOT NULL, 
    `desc` varchar(50) NOT NULL, 
    `id_foro` int(3) NOT NULL, 
    `estado` int(1) NOT NULL, 
    `visibilidad` int(2) NOT NULL, 
    PRIMARY KEY (`id_categoria`), 
    KEY `id_categoria` (`id_categoria`), 
    KEY `id_foro` (`id_foro`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



INSERT INTO `f_categoria` (`id_categoria`, `name`, `desc`, `id_foro`, `estado`, `visibilidad`) VALUES 
(1, 'Programacion', 'Programacion', 1, 1, 1), 
(2, 'Modelado', 'Modeladoen 3d', 1, 1, 1); 

-- -------------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `f_comentario` (
    `id_comentario` bigint(20) NOT NULL AUTO_INCREMENT, 
    `id_post` bigint(20) NOT NULL, 
    `id_user` bigint(20) NOT NULL, 
    `contenido` longtext NOT NULL, 
    `number` int(4) NOT NULL, 
    `fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id_comentario`), 
    KEY `id_post` (`id_post`), 
    KEY `id_user` (`id_user`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 



INSERT INTO `f_comentario` (`id_comentario`, `id_post`, `id_user`, `contenido`, `number`, `fecha`) VALUES 
(1, 1, 1, 'Este es el primer comentario', 1, '2013-07-30 23:12:53'), 
(2, 1, 1, 'Este es el comentario 2', 2, '2013-07-30 23:25:12'), 
(3, 2, 1, 'cOMENTARIO EN EL POST2', 1, '2013-07-30 23:53:44'); 

-- -------------------------------------------------------- 



CREATE TABLE IF NOT EXISTS `f_foro` (
    `id_foro` int(5) NOT NULL, 
    `name` varchar(15) NOT NULL, 
    `desc` varchar(50) NOT NULL, 
    `visibilidad` int(2) NOT NULL, 
    PRIMARY KEY (`id_foro`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



INSERT INTO `f_foro` (`id_foro`, `name`, `desc`, `visibilidad`) VALUES 
(1, 'Prueba', 'Foro de prueba', 1); 

-- -------------------------------------------------------- 


CREATE TABLE IF NOT EXISTS `f_post` (
    `id_post` bigint(20) NOT NULL AUTO_INCREMENT, 
    `id_user` bigint(20) NOT NULL, 
    `titulo` varchar(50) NOT NULL, 
    `contenido` longtext NOT NULL, 
    `fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `estado` int(1) NOT NULL, 
    `id_categoria` int(4) NOT NULL, 
    PRIMARY KEY (`id_post`), 
    KEY `id_user` (`id_user`), 
    KEY `id_categoria` (`id_categoria`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 



INSERT INTO `f_post` (`id_post`, `id_user`, `titulo`, `contenido`, `fecha`, `estado`, `id_categoria`) VALUES 
(1, 1, '¡Hola!', 'mensaje de prueba', '2013-07-30 23:12:05', 1, 1), 
(2, 1, 'post 2', 'es el post2', '2013-07-30 23:27:25', 1, 2), 
(3, 1, 'post3', 'el post3', '2013-07-31 00:04:52', 1, 1); 

-- -------------------------------------------------------- 



CREATE TABLE IF NOT EXISTS `f_user` (
    `id_user` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(15) NOT NULL, 
    `mail` varchar(50) NOT NULL, 
    `fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id_user`), 
    UNIQUE KEY `name` (`name`,`mail`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

-- 
-- Volcado de datos para la tabla `f_user` 
-- 

INSERT INTO `f_user` (`id_user`, `name`, `mail`, `fecha`) VALUES 
(1, 'tulipo', '[email protected]', '2013-07-30 23:07:36'); 




ALTER TABLE `f_categoria` 
    ADD CONSTRAINT `f_categoria_ibfk_1` FOREIGN KEY (`id_foro`) REFERENCES `f_foro` (`id_foro`); 


ALTER TABLE `f_comentario` 
    ADD CONSTRAINT `f_comentario_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `f_user` (`id_user`), 
    ADD CONSTRAINT `f_comentario_ibfk_1` FOREIGN KEY (`id_post`) REFERENCES `f_post` (`id_post`); 


ALTER TABLE `f_post` 
    ADD CONSTRAINT `f_post_ibfk_2` FOREIGN KEY (`id_categoria`) REFERENCES `f_categoria` (`id_categoria`), 
    ADD CONSTRAINT `f_post_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `f_user` (`id_user`); 

Как я могу сделать запрос для получения самого последней должности, но с учетом последних комментариев?

Это дает мне последние комментарии

select id_post,id_user,contenido,fecha from f_comentario group by id_post order by fecha DESC 

И с тем, что последнее сообщение,

select id_post,id_user,contenido,fecha from f_post order by fecha DESC 

Я должен присоединиться к этим два запроса, а затем сгруппировать их по 10 последним id_post (дата) ...

Кто-то дает мне руку? Спасибо, и приветствия

+0

Угадайте на 'mysql' на основе обратных ссылок, но если неправильно, пожалуйста, перемаркируйте с правильным базы данных. –

ответ

0

Исправьте меня, если я не понимаю вас, но то, что вы ищете, это 10 последних id_post, id_user, contenido, fecha из таблицы комментариев, основанных на последнем комментарии, а не когда сама запись был сделан?

select TOP 10 f_com.id_post, f_com.id_user, f_pos.contenido, f_com.contenido, f_com.fecha 
from f_comentario f_com 
inner join f_post f_pos 
on f_pos.id_post = f_com.id_post 
order by fecha DESC 

Это даст вам значения, хранящиеся в таблице f_comentario. Я думаю, что это то, что вы хотите. Немного сложно понять, что вы пытаетесь сделать, потому что я не могу понять имена таблиц и т. Д. Надеюсь, это поможет

p.s. Снова вы можете использовать аналогичные объединения, чтобы получить имя пользователя вместо идентификатора пользователя и заголовка вместо этого, если идентификатор сообщения ...

+0

Спасибо за ваш ответ! – topolo

Смежные вопросы