我的mysql数据库中有两个名为forum_topics和forum_replies的表。 我希望概述最新的帖子/回复,例如:http://prntscr.com/6ixtz4
为了做到这一点,我需要一种方法来使它按两个表中的时间排序,如果在结果中有一个forum_reply,它需要从forum_topics中获取它的主题。
我怎样才能做到这一点?我没有使用mysql查询来进行此工作。
CREATE TABLE IF NOT EXISTS `forum_topics` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`topic` varchar(255) NOT NULL,
`thread` varchar(255) NOT NULL,
`level` int(2) NOT NULL DEFAULT '0',
`creator` int(255) NOT NULL,
`time` varchar(255) NOT NULL,
`innlegg` text NOT NULL,
`ip` varchar(255) NOT NULL,
`locked` enum('yes','no') NOT NULL DEFAULT 'no',
`deleted` enum('yes','no') NOT NULL DEFAULT 'no',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
CREATE TABLE IF NOT EXISTS `forum_replies` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`topicid` int(255) NOT NULL,
`userid` int(255) NOT NULL,
`time` int(255) NOT NULL,
`reply` text NOT NULL,
`deleted` enum('yes','no') NOT NULL DEFAULT 'no',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;
exampledata:
in table forum_topics
id |topic| time|
1 | test | 10
2 | test2 | 29
in table forum replies:
id | topicid | time |
1 | 1 | 18
2 | 2 | 28
在这个例子中,我希望结果可以这样排序:
10
18
28
29
如果forum_replies是其中一个结果,则需要来自forum_topics的一些数据,但如果forum_topics是其中一个结果,则不需要来自forum_replies的任何数据。
topicid是主题的forum_topics中的id,回复是对该主题的响应。
所以最后我想在图像中创建示例输出。
编辑: 这将是一个包含在以下顺序的结果: 10 18 28 29
答案 0 :(得分:1)
通过在示例数据集中加载数据,这将从两个表中获取时间,但是从两者中对时间进行排序,就好像它们在一个表中一样。以下查询获取结果,然后按时间顺序对它们进行排序。由于两个表具有相同的结构,因此您可以" union"它们就像它们是一张桌子一样,按时间排序" order_by"
select time
from forum_topics
UNION
select time
from forum_replies
order by time
注意:我能够在上面的请求中加载两个表,但每个表都没有最后一行。换句话说,我修剪了引用引擎的部分,然后只是创建了表格,然后输入了提供的数据..
答案 1 :(得分:0)
对不起,我不得不说论坛帖子的表结构不正确。在您的情况下,您将很难根据主题和回复对帖子进行排序。我建议像这样的表结构:
CREATE TABLE IF NOT EXISTS `forum_topics` (
`tid` int(255) NOT NULL AUTO_INCREMENT, // Topic ID
`tsubject` varchar(255) NOT NULL, // Topic Subject
`level` int(2) NOT NULL DEFAULT '0',
`creator` int(255) NOT NULL,
`innlegg` text NOT NULL, // I don't know what this means ...
`locked` enum('yes','no') NOT NULL DEFAULT 'no',
`deleted` enum('yes','no') NOT NULL DEFAULT 'no',
PRIMARY KEY (`tid`),
UNIQUE KEY `id` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;
CREATE TABLE IF NOT EXISTS `forum_posts` (
`pid` int(255) NOT NULL AUTO_INCREMENT,
`tid` int(255) NOT NULL,
`userid` int(255) NOT NULL,
`time` int(255) NOT NULL,
`pcontent` text NOT NULL, // Post Content
`isauthorpost` int(1) NOT NULL, // Optional: If this is the first post of the topic
`deleted` enum('yes','no') NOT NULL DEFAULT 'no',
PRIMARY KEY (`pid`),
UNIQUE KEY `id` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;
所以现在你将有第一个主题ID。您可以使用ORDER BY pid
搜索所有回复,有关主题详情,您可以使用LEFT JOIN forum_topics
或INNER JOIN
完成回复。