0

例如,我有这个查询(很好,它可以按我的意愿工作)

SELECT  `discusComments`.`memberID`, COUNT( `discusComments`.`memberID`) AS postcount 
FROM `discusComments`
GROUP BY  `discusComments`.`memberID` ORDER BY postcount DESC

示例结果:

memberid    postcount
3             283
6             230
9             198

现在我想将 discusComments 表的 memberid 与 discusTopic 表的 memberid 连接起来(因为我真正想做的只是从特定的 GROUP 中获取我的结果,而 group id 只在主题表中而不在评论中一个因此加入。

SELECT  `discusComments`.`memberID`, COUNT( `discusComments`.`memberID`) AS postcount 
FROM `discusComments`
LEFT JOIN `discusTopics` ON `discusComments`.`memberID` =  `discusTopics`.`memberID`
GROUP BY  `discusComments`.`memberID` ORDER BY postcount DESC

示例结果:

memberid    postcount
3             14789
6              8678
9              6987

我怎样才能阻止 postcount 发生这种巨大的增长?我需要像以前一样保存它。

一旦我完成了这个排序,我希望有一些这样的行WHERE discusTopics.groupID = 6,例如

CREATE TABLE IF NOT EXISTS `discusComments` (
  `id` bigint(255) NOT NULL auto_increment,
  `topicID` bigint(255) NOT NULL,
  `comment` text NOT NULL,
  `timeStamp` bigint(12) NOT NULL,
  `memberID` bigint(255) NOT NULL,
  `thumbsUp` int(15) NOT NULL default '0',
  `thumbsDown` int(15) NOT NULL default '0',
  `status` int(1) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7190 ;

.

CREATE TABLE IF NOT EXISTS `discusTopics` (
  `id` bigint(255) NOT NULL auto_increment,
  `groupID` bigint(255) NOT NULL,
  `memberID` bigint(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `views` bigint(255) NOT NULL default '0',
  `lastUpdated` bigint(10) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `groupID` (`groupID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=913 ;
4

3 回答 3

1
SELECT  `discusComments`.`memberID`, COUNT( `discusComments`.`memberID`) AS postcount 
FROM `discusComments`
JOIN `discusTopics` ON `discusComments`.`topicID` =  `discusTopics`.`id`
GROUP BY  `discusComments`.`memberID` ORDER BY postcount DESC

在两个表中加入 topicid 解决了 memberID 问题。谢谢@Andiry M

于 2012-09-09T20:53:21.027 回答
0

您只需要使用 JOIN 而不是 LEFT JOIN ,您可以在 ON 之后添加 AND discusTopics.memberID = 6 discusCommentsmemberID= discusTopicsmemberID

您可以像这样使用子查询

SELECT  `discusComments`.`memberID`, COUNT( `discusComments`.`memberID`) AS postcount 
FROM `discusComments` where `discusComments`.`memberID` in 
(select distinct  memberid from `discusTopics` WHERE GROUPID = 6)
于 2012-09-09T19:18:58.300 回答
-1

如果我理解你的问题,你根本不需要在这里使用 JOIN 。如果您有多对多关系并且需要为一个表中的每个值选择另一个表中的所有对应值,则需要 JOIN。

但是,如果我做对了,您将拥有多对一的关系。然后你可以像这样简单地从两个表中选择

SELECT a.*, b.id FROM a, b WHERE a.pid = b.id

这是一个简单的请求,不会像 JOIN 那样产生巨大的开销

PS:将来尝试使用您的查询进行试验,尽量避免 JOIN,尤其是在 MySQL 中。它们的复杂性缓慢而危险。对于 90% 的情况,当您想使用 JOIN 时,有一个简单且更快的解决方案。

于 2012-09-09T19:20:37.450 回答