我想按日期排列主题并显示其类别

时间:2014-08-05 16:38:12

标签: database categories

对于我的大学项目,我正在建立一个论坛。

我希望按日期排列主题,并在每个主题中显示其类别 我的论坛将输出显示为 -

让我们分为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';
?>

1 个答案:

答案 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