我有这个查询的例子(好的,它按照我想要的方式工作)
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表的成员(因为我真正想做的只是从特定的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 ;
答案 0 :(得分: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
答案 1 :(得分:0)
你需要只使用JOIN而不是LEFT JOIN,你可以在ON discusComments
之后添加AND discusTopics.memberID = 6. memberID
= discusTopics
。memberID
你可以使用这个
的子查询SELECT `discusComments`.`memberID`, COUNT( `discusComments`.`memberID`) AS postcount
FROM `discusComments` where `discusComments`.`memberID` in
(select distinct memberid from `discusTopics` WHERE GROUPID = 6)
答案 2 :(得分:-1)
如果我理解你的问题,你根本不需要在这里使用JOIN。如果您有多对多关系,并且您需要在一个表中选择每个值,则需要JOIN。选择另一个表中的所有相应值。
但是如果我做对了,你就会有多对一的关系。然后你可以简单地从这样的两个表中选择
SELECT a.*, b.id FROM a, b WHERE a.pid = b.id
这是一个简单的请求,不会像JOIN那样产生巨大的开销
PS:将来尝试尝试查询,尽量避免使用JOIN,特别是在MySQL中。它们的复杂性很慢且很危险。对于90%的情况,当您想使用JOIN时,可以使用简单且快速的解决方案。