希望你们能帮忙,因为这已经困扰了我几天了。我正在尝试从表中获取唯一行的总数。例如,表中的数据如下所示;
user_1 | user_2 | date_added | date_removed
--------|--------|---------------------|---------------------
1 | 2 | 2016-09-20 15:51:45 | 2016-09-24 09:15:32
1 | 3 | 2016-09-21 10:16:03 | 2016-09-29 00:46:44
6 | 1 | 2016-09-23 05:48:59 | 0000-00-00 00:00:00
1 | 3 | 2016-09-30 09:57:16 | 0000-00-00 00:00:00
我想要找到的是user_id出现的总行数(列user_1
或列user_2
),其中只有一个条目用于该用户配对(用户配对将始终位于相同的列中),date_removed
= 0000-00-00 00:00:00
。
因此,如果我在上面的表格中搜索user_id
'1',则总数将为“1”。 (只有第3行匹配搜索标准);
搜索user_id
'2'将等于'0';
'{3'的user_id
等于'0';
'{6'的user_id
等于'1';
希望这是有道理的。任何帮助或指示将不胜感激。
----编辑----
这是我到目前为止的查询,我尝试了几种方式加入等等,但这让我最接近目前为止,并不是最清洁的方式!
SELECT COUNT(*) AS `count`
FROM `table`
WHERE (`user_1` = '1' OR `user_2` = '1')
GROUP BY `user_1`, `user_2`
HAVING `count` < '2' AND MAX(`date_removed`) < '0000-00-00 00:00:01'
但是,当表中显示更多数据时,查询结果如下所示:
count
-----
1
1
1
我希望它显示在哪里:
count
-----
3
答案 0 :(得分:0)
实现这一目标的方法不止一种。 我发送了一个选项,创建了一个视图以使其更容易,但如果您不想创建视图,则可以在子查询中使用其代码。
创建一个视图以合并user1,user2
的所有可能组合create view result as
select user1, user2, date_removed from test
union all
select user2, user1, date_removed from test
创建查询
select r.user1, r.user2
from result r
where
r.date_removed = '0000-00-00 00:00:00'
and r.user2 not in (select r2.user2
from result r2
where r2.date_removed <> '0000-00-00 00:00:00')
希望它可以帮助你解决它。