2016-10-01 58 views
0

希望你们能帮忙,因为这一直困扰着我几天。我试图从表中获取唯一行的总数。例如,表中的数据看起来像这样;从MySQL中选择独特的行

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”。 (只有第三行符合搜索标准); 其中user_id'2'的搜索等于'0'; '3'等于'0'的 user_id; '6'将等于'1'的 user_id;

希望是有道理的。任何帮助或指针将不胜感激。

---- ----编辑

这是查询我到目前为止,我已经尝试过多种方法INC加入等等,但是这已经让我最接近的,到目前为止,它不是最干净方式确定!

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

从您的解释,它看起来像你只在user_1上搜索。但它听起来像你想在user_1和user_2中搜索user_id。如果是这样的话,1的user_id将导致2的计数。因此,6或1的user_id将匹配第3行.1的user_id将匹配第3和4行....你能解释更多详情? – TimBrownlaw

+0

user_id将在两列(user_1和user_2)中进行搜索。只有第3行将匹配用户1的搜索要求,因为尽管第4行对于date_removed具有“0000-00-00 00:00:00”,用户配对(1&3)也出现在第2行。 – user3053392

+0

您可以在质疑你已经尝试过的SQL?正如@ user3053392指出的那样,理解是可以找到多于一行的行。另外,当我user_id = 3时,它也会返回1(第4行),据我了解。我认为我们错过了一些东西。 – Tom

回答

0

还有更多比实现这一点的方法之一。 我发送一个选项,创建一个视图使其更容易,但如果您不想创建视图,则可以在子查询中使用其代码。

  1. 创建视图工会USER1的所有可能的组合,用户2

    create view result as 
    select user1, user2, date_removed from test 
    union all 
    select user2, user1, date_removed from test 
    
  2. 创建一个查询

    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') 
    

希望它可以帮助你解决这个问题。