SQL отчетливый, получая 2 столбца - PullRequest
1 голос
/ 02 января 2012

Я пытаюсь создать функцию простого сообщения для своего веб-сайта, но я не могу получить отдельные данные из 2 столбцов (столбец **from** и столбец **to**)

enter image description here

вы видите примеры данных на картинке

как я могу получить возврат "1,4,23,45,345"?

Ответы [ 2 ]

7 голосов
/ 02 января 2012

Вы должны объединить оба столбца и затем отфильтровать их по различным значениям:

select distinct T.from_to from
( select `from` as from_to
  from messages
  union
  select `to` as from_to
  from messages
) T

, если вам действительно нужно все в отдельной строке запятой, используйте GROUP_CONCAT ([DISTINCT] функция агрегирования.

EDITED :

Вы должны пометить в качестве решения ответ Джеральда. После проверки оператора объединения и перечитывания документации оператора объединения mysql , по умолчанию mysqlфильтр для различных значений:

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)

затем, окончательный запрос :

  select `from` as from_to
  from messages
  union distinct
  select `to` as from_to
  from messages

Обратите внимание, что distinct не является обязательным.

Только если вам нужна запятая строка, первое решение необходимо:

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
4 голосов
/ 02 января 2012
select from as ft from messages
union
select to as ft from messages

В MySQL union выбирает отдельные строки по умолчанию. Вы должны использовать UNION ALL для дублирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...