I am trying to count the total comments posted by single user. Here is the table structure of the comments table:
CREATE TABLE `PLD_COMMENT` (
`ID` int(11) NOT NULL auto_increment,
`ITEM_ID` varchar(11) NOT NULL,
`USER_ID` varchar(11) NOT NULL,
`USER_NAME` varchar(255) NOT NULL,
`COMMENT` longtext,
`COMMENT_TITLE` varchar(255) default NULL,
`COMMENT_RATING` tinyint(1) default '1',
`TYPE` int(11) NOT NULL,
`DATE_ADDED` timestamp NOT NULL
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`IPADDRESS` varchar(15) default NULL,
`STATUS` varchar(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
Here is the table structure for user table
CREATE TABLE `pld_user`(
`ID` int(11) NOT NULL auto_increment,
`LOGIN` varchar(100) NOT NULL,
`NAME` varchar(255) NOT NULL,
`PASSWORD` varchar(46) NOT NULL,
`LEVEL` tinyint(4) NOT NULL default '0',
`RANK` tinyint(4) NOT NULL default '0',
`ACTIVE` tinyint(4) NOT NULL default '0',
`LAST_LOGIN` timestamp NOT NULL
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`REGISTRATION_DATE` timestamp NOT NULL default '0000-00-00 00:00:00',
`AUTH_IMG` varchar(255) default NULL,
`AUTH_IMGTN` varchar(255) default NULL,
`SUBMIT_NOTIF` tinyint(4) NOT NULL default '1',
`PAYMENT_NOTIF` tinyint(4) NOT NULL default '1',
`ADDRESS` varchar(255) default NULL,
`EMAIL` varchar(255) NOT NULL,
`WEBSITE` varchar(255) default NULL,
`WEBSITE_NAME` varchar(255) default NULL,
`INFO` varchar(255) default NULL,
`ANONYMOUS` tinyint(4) NOT NULL default '0',
`LANGUAGE` varchar(2) default NULL,
`AVATAR` varchar(100) default NULL,
`ICQ` varchar(15) default NULL,
`AIM` varchar(255) default NULL,
`YIM` varchar(255) default NULL,
`MSN` varchar(255) default NULL,
`CONFIRM` varchar(10) default NULL,
`NEW_PASSWORD` varchar(46) default NULL,
`EMAIL_CONFIRMED` int(11) NOT NULL default '1',
`LNAME` varchar(255) default NULL,
`CITY` varchar(255) default NULL,
`STATE` varchar(255) default NULL,
`DOB` date default NULL,
`UTYPE` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
COMMENT='Stores all the users with informations'
Here is my query:
SELECT count(c.USER_ID) as total_commments_user ,
c.*, u.NAME, l.TITLE as LINK_TITLE, u.AUTH_IMG
FROM `PLD_COMMENT` c
left outer join `PLD_USER` u ON (u.ID = c.USER_ID)
left outer join `PLD_LINK` l ON (l.ID = c.ITEM_ID AND l.STATUS='2')
WHERE c.TYPE = '1'
AND c.STATUS = '2'
group by c.ID ORDER BY c.ID DESC LIMIT 0 , 3
When I run this query I got 1 in each row under total_comments_user.
Any idea?
You need to add all the columns you are selecting in the
SELECTclause except thec.USER_IDto theGROUP BYclause, like this:EDIT: I think the following will work properly:
Example:
If you have the following sample data:
PLD_LINK:
PLD_USER:
PLD_COMMENT:
Case 1: the user
Mahmoudis displayed twice:Then, the previous query will give you the count of the comments for each User and for each item too, like this:
Notice that the user
Mahmoudis displayed twice with a different count, becouse he has differentItem_Id.Case 2: the user
Mahmoudis diplayed only one time:If you want to get the count of comments for each user for all items then you will need to group by only the
USER_IDand you will got:As you can see now the user
Mahmoudis displayed only one time, becouse we ingonredItem_Id.You can then filter by status or what ever.