2014-09-20 100 views
1

我正在尝试为我的管理面板开发一个功能,该功能根据它们可能具有的任何“标志”获取评论。我想要从评论表中获取结果,但只能在标记表中关联行的注释。然后,我想根据评论的标志总数来排列结果。为什么在使用group by和left join时出错?

这是我的表结构:

CREATE TABLE IF NOT EXISTS `article_comments` (
    `comment_id` int(15) NOT NULL AUTO_INCREMENT, 
    `author_id` int(15) NOT NULL, 
    `article_id` int(15) NOT NULL, 
    `modifier_id` int(15) NOT NULL, 
    `content` varchar(255) NOT NULL, 
    `date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `date_modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`comment_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

CREATE TABLE IF NOT EXISTS `article_comment_flags` (
    `flag_id` int(15) NOT NULL AUTO_INCREMENT, 
    `comment_id` int(15) NOT NULL, 
    `member_id` int(15) NOT NULL, 
    `date_flagged` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`flag_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

这是我使用的当前查询:

SELECT 
     c.comment_id AS comment_id, c.article_id, 
     f.flag_id, f.comment_id, f.member_id, f.date_flagged, COUNT(f.flag_id) AS total_flags 
    FROM article_comments AS c 
    LEFT JOIN article_comment_flags AS f ON (c.comment_id = f.comment_id) 
    GROUP BY comment_id 
    ORDER BY total_flags DESC 
    LIMIT 5 

这是我得到当前的SQL错误:

Column 'comment_id' in group statement is ambiguous 

任何人有任何想法?

+0

它的别名 - 通过c.comment_id'使用'组,而不是... – sgeddes 2014-09-20 01:48:17

回答

2

你必须指出它将被编组为comment_id。所以,你必须改变路线:

GROUP BY comment_id 

GROUP BY c.comment_id 
+1

考虑OP是选择'C .comment_id',我想这将是正确的分组。 – sgeddes 2014-09-20 01:49:36

0

栏目组声明 'COMMENT_ID' 不明确:

SELECT 
c.comment_id AS comment_id, 
f.comment_id 
FROM article_comments AS c 
LEFT JOIN article_comment_flags AS f ON (c.comment_id = f.comment_id) 
GROUP BY comment_id 
  • 他们是平等的,所以你只需要一个从左边拿一个,因为它总是在那里,所以从选择部分删除f.comment_id。
  • 你可以写USING(comment_id)而不是ON(..),那么你只能得到这个列一次。
  • 明确地告诉,至极列GROUP BY,从左侧这里最好使用c.comment_id