2015-11-05 83 views
-2

我有两列:发件人,收件人在我的表中。我想获得发送者或接收者等于b的列中的独特列表,然后将它们连接到字符串中。MYSQL两列不同

.................... 
sender | receiver 
.................... 
    a   b 
    c   b 
    b   a 
    b   c 
    d   f 
    b   e 
    b   e 
    e   b 

结果集应该看起来像A,B,C,E

我应该怎么做来实现这一目标?

+0

如果你连接它们,你有两个字母,所以结果'a,b,c,e'会是两对。第二对不包含'b',所以我很好奇你是如何得到这个结果的...... – GolezTrol

+0

另外,这可能可以在SQL中完成。你在寻找一个MySQL解决方案吗?如果是这样,请删除PHP标记,因为这对查询本身无关紧要。 – GolezTrol

+0

为了解决您的问题,如果他们帮助您,请将任何一个答案标记为已接受。 – zedfoxus

回答

1

你可以做2个被联合查询得到的值。联盟应该消除重复。然后,你可以使用它作为一个子查询并做GROUP_CONCAT的结果: -

SELECT GROUP_CONCAT(aCol) 
FROM 
(
    SELECT sender AS aCol 
    FROM SomeTable 
    WHERE sender = 'b' 
    OR receiver = 'b' 
    UNION 
    SELECT receiver AS aCol 
    FROM SomeTable 
    WHERE sender = 'b' 
    OR receiver = 'b' 
) sub0 
+0

它像一个魅力。谢谢! – user2126081

1

看看这个线程:MySQL SELECT DISTINCT multiple columns

SELECT DISTINCT value FROM 
( 
    SELECT DISTINCT a AS value FROM my_table 
    UNION 
    SELECT DISTINCT b AS value FROM my_table 
    UNION 
    SELECT DISTINCT c AS value FROM my_table 
) AS derived 
1

试试这个:

create table test (sender char(1), receiver char(1));  
insert into test values ('a','b'), ('c','b'), ('b','a'), ('b','c'), ('d','f'), ('b','e'), ('b', 'e'), ('e', 'b'); 

select group_concat(sender separator ',') as result 
from (
    select sender from test where receiver = 'b' 
    union 
    select 'b' 
) alias; 

+---------+ 
| result | 
+---------+ 
| a,c,e,b | 
+---------+ 

如果你想按字母顺序排序,你可以用select 'b' order by sender取代select 'b'会让你得到a,b,c,e作为结果