Php MYSQL用于两列

Php MYSQL用于两列,php,mysql,distinct,concat,Php,Mysql,Distinct,Concat,我的表中有两列:发送方和接收方。我想得到发送方或接收方等于b的两列的distinct,然后将它们合并为字符串 .................... sender | receiver .................... a b c b b a b c d f b e b e e

我的表中有两列:发送方和接收方。我想得到发送方或接收方等于b的两列的distinct,然后将它们合并为字符串

....................
sender  |  receiver
....................
  a            b
  c            b
  b            a
  b            c
  d            f
  b            e
  b            e
  e            b
结果集应类似于a、b、c、e


要实现这一点,我应该做些什么?

看看这个线程:


您只需执行两次联合查询即可获得值。工会应该消除重复。然后,您可以将其用作子查询,并对结果进行分组查询:-

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
试试这个:

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 |
+---------+

如果您想要按字母顺序排序,您可以将
选择“b”
替换为
按发件人选择“b”顺序
,您将得到
a、b、c、e
,结果是
a、b、c、e

如果您对它们进行排序,您有两个字母,因此结果
a、b、c、e
将是两对。第二对不包含
b
,因此我很好奇您是如何得到这个结果的……而且,这可能可以在SQL中完成。您正在寻找MySQL解决方案吗?如果是这样,请删除PHP标记,因为它与查询本身无关。要结束您的问题,请将任何一个答案标记为已接受,如果它们对您有帮助。
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 |
+---------+