我試圖用從(users_status表)中的數據派生的條件過濾掉我的(用戶表)數據。group by和在子查詢中計數
的用戶表是一個包含用戶ID和用戶名
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(25),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
的基表由包含表組ID
CREATE TABLE `groups` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(25),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
的user_status表是一個表包含活動日誌。它的工作方式是當用戶在組中時,用戶可以在「開」或「關」之間切換「加書籤」。
CREATE TABLE `user_status` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`group_id` int(10) unsigned,
`user_id` int(10) unsigned,
`bookmarked` enum('on', 'off'),
`date` datetime,
PRIMARY KEY (`id`),
CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE,
CONSTRAINT `user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
現在我想要做的是檢索所有,要麼在user_status或user_status的最後一項中沒有任何條目的用戶來說是「關」
我有一個SQL小提琴與一個不完整的子查詢,我嘗試這樣做,但我沒有得到這個工作。 http://sqlfiddle.com/#!2/2d5b4/2
select us.id, us.group_id, g.name as GROUP_NAME, us.user_id, u.username as USER_USERNAME, us.bookmarked, us.date
from user_status us
inner join users u ON u.id = us.user_id
inner join groups g ON g.id = us.group_id
where 'on' != (
select bookmarked
from user_status
group by (group_id, user_id)
where group_id = us.group_id AND user_id = us.user_id
order by ID DESC
limit 1;
);
EDIT下午6時28 因此,考慮user_status
select * from user_status order by group_id, user_id, date;
+----+----------+---------+------------+--------------------------------+
| ID | GROUP_ID | USER_ID | BOOKMARKED | DATE |
+----+----------+---------+------------+--------------------------------+
| 1 | 1 | 1 | on | January, 16 2014 00:00:00+0000 |
| 2 | 1 | 1 | off | January, 17 2014 00:00:00+0000 |
| 3 | 1 | 1 | on | January, 18 2014 00:00:00+0000 |
| 9 | 1 | 1 | on | January, 18 2014 00:00:00+0000 |
| 7 | 1 | 2 | on | January, 16 2014 00:00:00+0000 |
| 8 | 1 | 2 | off | January, 17 2014 00:00:00+0000 |
| 4 | 2 | 1 | on | January, 16 2013 00:00:00+0000 |
| 5 | 2 | 1 | off | January, 17 2013 00:00:00+0000 |
| 6 | 2 | 1 | on | January, 18 2013 00:00:00+0000 |
+----+----------+---------+------------+--------------------------------+
我希望
GROUP_ID(1)USER_ID(1) 沒有返回因爲最後加入書籤的是'on'
GROUP_ID(1)的user_id(2) 返回因爲最後書籤是 '關斷'
GROUP_ID(2)的user_id(1) 因爲最後書籤是 '上'
不返回USER_ID(3) 返回因爲不存在於user_status 注:USER_ID 3在原來的SQL撥弄例如不添加
請澄清。鑑於你的測試結果集,應該返回哪些用戶?用戶2的最後一個條目是'off',用戶3在'user_status'中有_no個條目_。是否應該返回一個或兩個? –
請再次澄清:因爲user_id = 3應該返回group_id = 1和group_id = 2,user_id = 2應返回group_id = 2,因爲user_status中沒有行 –
嗨Eugen,user_id = 3應該只返回一次因爲它在user_status中完全不存在。 – user391986