У меня есть одна база данных с именем sdb
, в ней есть 3 таблицы users
, posts
и users_follow
, для создания таблиц запросов для всех 3 таблиц следуют
-- users table
CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(25) NOT NULL,
`email` varchar(35) NOT NULL,
`password` varchar(255) NOT NULL,
`user_status` enum('active','inactive','remove') DEFAULT 'active',
`signup_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB;
данные таблицы пользователей
-- posts table
CREATE TABLE `posts` (
`post_id` int(11) NOT NULL AUTO_INCREMENT,
`title` tinytext NOT NULL,
`content` text NOT NULL,
`posted_at` datetime DEFAULT CURRENT_TIMESTAMP,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`post_id`),
KEY `posts_fk1` (`user_id`),
CONSTRAINT `posts_fk1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
данные таблицы данных
-- users_follow table
CREATE TABLE `users_follow` (
`follow_id` int(11) NOT NULL AUTO_INCREMENT,
`follower_id` int(11) DEFAULT NULL,
`following_id` int(11) NOT NULL,
`follow_status` enum('active','blocked') DEFAULT 'active',
PRIMARY KEY (`follow_id`),
KEY `users_follow_fk1` (`follower_id`),
KEY `users_follow_fk2` (`following_id`),
CONSTRAINT `users_follow_fk1` FOREIGN KEY (`follower_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `users_follow_fk2` FOREIGN KEY (`following_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
users_follow table data
Я пытаюсь выполнить следующий запрос (для пользователя с user_id = 1)
SELECT a.user_id,
SUM(CASE WHEN f.following_id = 1 THEN 1 ELSE 0 END) AS count_followers,
SUM(CASE WHEN f.follower_id = 1 THEN 1 ELSE 0 END) AS count_followings,
SUM(CASE WHEN p.user_id = 1 THEN 1 ELSE 0 END) AS count_posts
FROM users_follow f
RIGHT JOIN users a
ON f.following_id = a.user_id
RIGHT JOIN users b
ON f.follower_id = b.user_id
LEFT JOIN posts p
ON p.user_id = a.user_id
where a.user_id = 1;
выше, запрос возвращает тот же счет для count_posts
и count_followers
, count_following = 0
вывод: вывод