2015-06-21 2 views
0

Я определенно не MySQL ниндзя, и я застрял в фильтрации и слиянии данных в одной таблице.Mysql - объединить две строки со значениями

Вот таблица

user_id | profile_key | profile_value 

2424  | status  | active 
2424  | channel  | 2345 
3543  | status  | closed 
3543  | channel  | 2345 
... 

Я хотел бы, чтобы фильтровать пользователь с одинаковым значением канала и И только активными строками

Я попытался

SELECT user_id, profile_key, profile_value 
FROM my_table 

WHERE (
     (profile_key = 'channel' AND profile_value = '"2345"') 
     AND 
     (profile_key = 'status' AND profile_value = 'active') 
    ) 

GROUP BY user_id 

Он не находит ни одной строки. Я думаю, что я пропустил часть JOIN rows, но я не уверен, как реализовать ее в одной таблице. Любая помощь будет очень признателен :)

ответ

0

Вам нужен or, group by и having пункт:

SELECT user_id, GROUP_CONCAT(profile_key), GROUP_CONCAT(profile_value) 
FROM my_table 
WHERE (profile_key = 'channel' AND profile_value = '2345') OR 
     (profile_key = 'status' AND profile_value = 'active') 
GROUP BY user_id 
HAVING COUNT(DISTINCT profile_key) = 2; 

Предложение HAVING гарантирует, что вы получите два матча. GROUP_CONCAT() в SELECT состоит в том, что каждая строка имеет несколько значений (т. Е. 2) для этих полей.

Я также не думаю, что вам нужны двойные кавычки вокруг числового значения, согласно вашим данным образца.

+0

Отлично! Я ничего не знал о предложении HAVING! Двойные кавычки вокруг числового значения - это потому, что в таблице хранится так. Спасибо, Гордон! :) – sXe

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