1

さて、私は2つのテーブルcommunityとcommunity_commentsを持っています。コミュニティは、トピックのタイトルやその他のトピックの詳細が保存されているテーブルです。community_detailsは、トピック/スレッドのすべての投稿またはコメントが保存されているテーブルです。

スレッドのコメントの日付と元のトピック/スレッドの日付に基づいて、最新の5つのトピックをプルアップする必要があります。

現在、コメントがまだないスレッドもありますが、コメントがあるスレッドよりも新しいスレッドがあります。正しく引き上げる必要があります。

次のようなクエリを試しました

SELECT MAX(community_comments.id), `community`.*
FROM (`community`)
LEFT JOIN `community_comments` ON `community`.`id`=`community_comments`.`community_id`
WHERE `community`.`type` = 1
GROUP BY `community_comments`.`id`
ORDER BY `community_comments`.`date_posted` DESC
LIMIT 5 

これは同じスレッドを複数回プルアップし、これは

SELECT MAX(community_comments.id), `community`.*
FROM (`community`)
LEFT JOIN `community_comments` ON `community`.`id`=`community_comments`.`community_id`
WHERE `community`.`type` = 1
GROUP BY `community_comments`.`community_id`
ORDER BY `community_comments`.`date_posted` DESC
LIMIT 5 

一意のスレッドをプルアップしますが、正しい最新のスレッドをプルアップしません。

コミュニティのテーブル構造は次のとおりです。

CREATE TABLE `community` (   
  `id` varchar(12) character set utf8 NOT NULL,   
  `title` varchar(255) character set utf8 NOT NULL,   
  `content` text character set utf8 NOT NULL,   
  `author` varchar(13) character set utf8 NOT NULL,   
  `category` int(10) unsigned NOT NULL,   
  `type` tinyint(1) unsigned NOT NULL default '1' COMMENT '1 = Forum; 2 = Site Help; 3 = Local & Global',   
  `location` varchar(100) character set utf8 NOT NULL,   
  `country` int(10) unsigned NOT NULL,   
  `date_posted` datetime NOT NULL,   
  PRIMARY KEY  (`id`)   
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   

community_commentsのテーブル構造は次のとおりです。

CREATE TABLE `community_comments` (   
  `id` varchar(12) character set utf8 NOT NULL,   
  `community_id` varchar(12) character set utf8 NOT NULL,   
  `content` text character set utf8 NOT NULL,   
  `member_id` varchar(13) character set utf8 NOT NULL,   
  `type` tinyint(1) unsigned NOT NULL default '1' COMMENT '1 = Forum; 2 = Site Help; 3 =  Local & Global',   
  `quoted` varchar(12) character set utf8 NOT NULL COMMENT 'Id number of the comment that is being quoted',   
  `date_posted` datetime NOT NULL,   
  PRIMARY KEY  (`id`)   
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

したがって、私が正しく理解している場合は、最新の5つのcommunity_commentsが含まれているコミュニティフィールドが必要です。これを正しく行うには、SQLGroupByを使用します。

SELECT c.*, MAX(com.date_posted) as last_post
FROM community c
LEFT OUTER JOIN community_comments com
ON com.community_id = c.id
GROUP BY c.id
ORDER BY MAX(com.date_posted) DESC
LIMIT 5

コメントのないコミュニティを表示したくない場合は、左側の外部結合を内部結合に置き換えることができます。

于 2012-06-30T13:54:26.023 に答える
0
SELECT c.*, IFNULL(MAX(com.date_posted),c.date_posted) as last_post 
            FROM community c 
            LEFT OUTER JOIN community_comments com 
            ON com.community_id = c.id 
            GROUP BY c.id 
            ORDER BY last_post DESC 
            LIMIT 5 ;
于 2012-06-30T15:45:13.157 に答える