2016-10-01 101 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') 
    

希望它可以幫助你解決這個問題。