2016-10-01 5 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'. (Только 3-я строка соответствует критерию поиска); где поиск user_id '2' будет равен '0'; user_id из '3' будет равен '0'; user_id из '6' будет равен '1';

Надеюсь, что имеет смысл. Любая помощь или указатели будут высоко оценены.

---- EDIT ----

Это запрос я до сих пор, я попробовал несколько способов вкл присоединяется и т.д., но это заставило меня ближе всего до сих пор, и его не чистейшая путь уверен!

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

Из вашего объяснения, похоже, вы ищете только пользователь_1. Но похоже, что вы хотите искать user_id как в user_1, так и в user_2. Если это так, user_id из 1 приведет к подсчету 2. Таким образом, user_id из 6 или 1 будет соответствовать строке 3. Пользователь user_id из 1 будет соответствовать строкам 3 и 4 .... Можете ли вы объяснить это более подробно? – TimBrownlaw

+0

user_id будет искать в обоих столбцах (user_1 и user_2). Только строка 3 будет соответствовать поисковым запросам для пользователя 1, так как хотя строка 4 имеет «0000-00-00 00:00:00» для date_removed, пользовательское сопряжение (1 и 3) также отображается в строке 2. – user3053392

+0

Можете ли вы вставить в вопрос SQL, который вы уже пробовали? Как указал @ user3053392, понимание заключается в том, что будет найдено более одной строки. Кроме того, когда user_id = 3, он также вернет 1 (4-я строка) из моего понимания. Я думаю, что мы что-то упустили. – Tom

ответ

0

Там больше чем один из способов достижения этого. Я отправляю вариант, создавая представление, чтобы сделать его проще, но если вы не хотите создавать представление, вы можете использовать его код в подзапросе.

  1. Создание представления для объединения всех возможных комбинаций user1, user2

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

Надеется, что это поможет вам решить.

Смежные вопросы