Dovresti unire entrambe le colonne e quindi filtrare per valori distinti:
select distinct T.from_to from
( select `from` as from_to
from messages
union
select `to` as from_to
from messages
) T
se hai davvero bisogno di tutto in una stringa separata da virgola, usa GROUP_CONCAT([DISTINCT] funzione di aggregazione.
MODIFICATO :
Dovresti contrassegnare come soluzione la risposta di Gerald. Dopo il test dell'operatore union e rileggi la documentazione dell'operatore dell'unione mysql , per impostazione predefinita, filtro MySQL per valori distinti:
mysql> create table ta( a int );
Query OK, 0 rows affected (0.05 sec)
mysql> insert into ta values (1),(1),(2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from ta
-> union
-> select * from ta;
+------+
| a |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
quindi, la query finale è:
select `from` as from_to
from messages
union distinct
select `to` as from_to
from messages
Nota che distinct
non è obbligatorio.
Solo se hai bisogno di una stringa con virgole separate la prima soluzione è necessaria:
select distinct GROUP_CONCAT( distinct T.from_to from )
( select `from` as from_to
from messages
union
select `to` as from_to
from messages
) T