Собственно есть запрос:
SELECT u.id, b. * , u.id AS uid, u.nickname AS author, u.login as author_login,
COUNT(p.user_id) as records,
IFNULL( SUM( r.points ) , 0 ) AS points
FROM zbl_users u, zbl_blogs b
LEFT JOIN zbl_blog_posts p ON p.blog_id = b.id
LEFT JOIN zbl_ratings r ON r.item_id = p.id AND r.target = 'blogpost'
WHERE b.user_id = u.id AND owner='user'GROUP BY b.id
ORDER BY points DESC
В таблице zbl_blog_posts к примеру по user_id = 28 есть 3 записи, вышеописанный запрос возвращает 7, по user_id = 63 есть 1 запись возвращает 4.
Т.е. я хочу, чтобы запрос возвращал в records количество записей пользователя в блоге.
Помогите разобраться.
SHOW CREATE TABLE zbl_users;
| zbl_users | CREATE TABLE `zbl_users` (
`id` int(11) NOT NULL auto_increment,
`group_id` int(11) NOT NULL default '1',
`login` varchar(100) NOT NULL,
`nickname` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`icq` varchar(15) NOT NULL,
`regdate` datetime NOT NULL default '0000-00-00 00:00:00',
`logdate` datetime NOT NULL default '0000-00-00 00:00:00',
`birthdate` date NOT NULL default '0000-00-00',
`is_locked` int(11) NOT NULL,
`is_deleted` int(11) NOT NULL,
`rating` int(11) NOT NULL,
`points` int(11) NOT NULL,
`last_ip` varchar(15) NOT NULL,
`status` varchar(255) NOT NULL default '? ???????!',
`status_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `login` (`login`),
KEY `is_locked` (`is_locked`,`is_deleted`,`icq`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=cp1251 |
SHOW CREATE TABLE zbl_blogs;
| zbl_blogs | CREATE TABLE `zbl_blogs` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`title` varchar(250) NOT NULL,
`pubdate` datetime NOT NULL,
`allow_who` varchar(15) NOT NULL,
`view_type` varchar(15) NOT NULL default 'list',
`showcats` int(11) NOT NULL default '1',
`ownertype` varchar(15) NOT NULL default 'single',
`premod` int(11) NOT NULL,
`forall` int(11) NOT NULL default '1',
`owner` varchar(10) NOT NULL default 'user',
`seolink` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `seolink` (`seolink`),
KEY `user_id` (`user_id`),
KEY `allow_who` (`allow_who`),
KEY `blog1` (`ownertype`,`owner`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=cp1251 |
SHOW CREATE TABLE zbl_blog_posts;
| zbl_blog_posts | CREATE TABLE `zbl_blog_posts` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`cat_id` int(11) NOT NULL,
`blog_id` int(11) NOT NULL,
`pubdate` datetime NOT NULL,
`title` varchar(250) NOT NULL,
`feel` varchar(100) NOT NULL,
`music` varchar(100) NOT NULL,
`content` text NOT NULL,
`allow_who` varchar(20) NOT NULL,
`edit_times` int(11) NOT NULL,
`edit_date` datetime NOT NULL,
`published` int(11) NOT NULL default '1',
`seolink` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `seolink` (`seolink`),
KEY `user_id` (`user_id`),
KEY `pubdate` (`published`,`pubdate`),
KEY `pubdate_2` (`pubdate`,`blog_id`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=cp1251 |
в zbl_ratings хранятся оценки для постов, т.е. points = [-1, 1]
и привязываются они к постам через item_id и target='blogpost'
Отредактированно fuze (01.03.2010 10:35:46)