0

このコードを使用して、データベースからニュースを取得し、列「ビュー」で並べ替えます。

          <?php
          $getnewsinfo = mysql_query("SELECT * FROM news ORDER BY views DESC LIMIT 5");
    while($newsinforow = mysql_fetch_array($getnewsinfo))
    {
    $newsid = $newsinforow['id'];
    $title = $newsinforow['title'];
    $author = $newsinforow['author'];
    $date = date('d.m.Y', $newsinforow['date']);
    $picture = $newsinforow['picture'];
    $picture_desc = $newsinforow['picture_desc'];
    $category = $newsinforow['category'];
    $text = $newsinforow['text'];
?>

ニュースを閲覧数とコメント数で並べ替えたいのですが、方法がわかりません。これが私のデータベース構造です:

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(11) NOT NULL auto_increment,
  `views` int(11) NOT NULL default '0',
  `title` varchar(255) NOT NULL,
  `author` varchar(255) NOT NULL,
  `date` varchar(255) NOT NULL,
  `picture` varchar(255) NOT NULL,
  `picture_desc` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

CREATE TABLE IF NOT EXISTS `news_comments` (
  `id` int(11) NOT NULL auto_increment,
  `news_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `website` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `date` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

また、お聞きしたいのですが、コードとデータベース構造について何かコメントはありますか?

4

1 に答える 1

0

このSQLを試してください

SELECT n.*,count(nc.id) as cnt FROM news as n, news_comments as nc where n.id = nc.news_id group by nc.news_id ORDER BY views DESC,cnt DESC LIMIT 5
于 2012-12-16T11:39:21.347 に答える