对于我的大学项目,我正在建立一个论坛。
我希望按日期排列主题,并在每个主题中显示其类别 我的论坛将输出显示为 -
让我们分为3类 - 1)动物2)科学3)旅行 如果我在旅行类别中询问我的最新问题,那么我的答案将显示在底部。 随着问题(主题)根据类别显示。 主题按日期排列在类别中。如果我再次询问旅行类别中的另一个问题,我的问题(主题)将显示在最后一个位置。
我想在我提出问题(主题)后,我的最新问题(主题)应该排在最前面。
我想反过来。
我在课程中只完成了php和一些CSS。所以我不太了解数据库。
如果你想看到我的论坛网站视图的图像。 请点击下面的保管箱链接 - https://www.dropbox.com/s/tty5vhj0yi298pf/forum%20help.png
这是我的数据库。
DATABASE name = data`;
CREATE TABLE IF NOT EXISTS `categories` (
`cat_id` int(8) NOT NULL AUTO_INCREMENT,
`cat_name` varchar(255) NOT NULL,
`cat_description` varchar(255) NOT NULL,
PRIMARY KEY (`cat_id`),
UNIQUE KEY `cat_name` (`cat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
CREATE TABLE IF NOT EXISTS `posts` (
`post_id` int(8) NOT NULL AUTO_INCREMENT,
`post_content` text NOT NULL,
`post_date` datetime NOT NULL,
`post_topic` int(8) NOT NULL,
`post_by` int(8) NOT NULL,
PRIMARY KEY (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
CREATE TABLE IF NOT EXISTS `topics` (
`topic_id` int(8) NOT NULL AUTO_INCREMENT,
`topic_subject` varchar(255) NOT NULL,
`topic_date` datetime NOT NULL,
`topic_cat` int(8) NOT NULL,
`topic_by` int(8) NOT NULL,
PRIMARY KEY (`topic_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(8) NOT NULL AUTO_INCREMENT,
`user_name` varchar(30) NOT NULL,
`user_pass` varchar(255) NOT NULL,
`user_email` varchar(255) NOT NULL,
`user_date` datetime NOT NULL,
`user_level` int(8) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
这是 我的索引
<?php
//create_cat.php
include 'connect.php';
include 'header.php';
$sql = "SELECT
categories.cat_id,
categories.cat_name,
categories.cat_description,
COUNT(topics.topic_id) AS topics
FROM
categories
LEFT JOIN
topics
ON
topics.topic_id = categories.cat_id
GROUP BY
categories.cat_name, categories.cat_description, categories.cat_id";
$result = mysql_query($sql);
if(!$result)
{
echo 'The categories could not be displayed, please try again later.';
}
else
{
if(mysql_num_rows($result) == 0)
{
echo 'No categories defined yet.';
}
else
{
while($row = mysql_fetch_assoc($result))
{
//fetch last topic for each cat
$topicsql = "SELECT
topic_id,
topic_subject,
topic_date,
topic_cat
FROM
topics
WHERE
topic_cat = " . $row['cat_id'] . "
ORDER BY
topic_date
DESC
LIMIT
1";
$topicsresult = mysql_query($topicsql);
if(!$topicsresult)
{
echo 'Last topic could not be displayed.';
}
else
{
//if(mysql_num_rows($topicsresult) == 0)
//{
// echo 'no topics</br></br>';
//}
//else
//{
while($topicrow = mysql_fetch_assoc($topicsresult))
echo '<a href="topic.php?id=' . $topicrow['topic_id'] . '"> <h4>' . $topicrow['topic_subject'] . '<a href="category.php?id=' . $row['cat_id'] . '"> </h4>' . $row['cat_name'] . '</a></br></a> at ' . date('d-m-Y', strtotime($topicrow['topic_date'])).'</br></br>';
}
}
}
}
?><br />
<?php
include 'footer.php';
?>
答案 0 :(得分:0)
您的问题有点令人困惑,但我相信您希望将主题移到SELECT语句的左侧。此查询将返回从最新到最旧的主题,以及匹配的类别信息(如果可用)。如果类别信息不可用,则c1.cat_name和c1.cat_description将为null。
SELECT t1.topic_id, t1.topic_subject, t1.topic_date, t1.topic_cat, c1.cat_name, c1.cat_description
FROM topics t1 LEFT JOIN categories c1 ON t1.topic_id = c1.cat_id
ORDER BY t1.topic_date desc