Как использовать GROUP_CONCAT и UNION в одной инструкции MySQL

#php #mysql #union #group-concat

#php #mysql #объединение #group-concat

Вопрос:

В моей базе данных есть 2 таблицы, которые идентичны по структуре, но содержат разные записи. В каждой таблице есть поле «ключевые слова», которое содержит данные, разделенные запятыми.

На данный момент я запускаю 2 запроса MySQL, чтобы получить 2 разных результата, которые я затем объединяю, используя следующие инструкции MySQL:

 SELECT GROUP_CONCAT(keywords) keywords FROM table1
  

и

 SELECT GROUP_CONCAT(keywords) keywords FROM table2
  

Я уверен, что смогу получить то, что мне нужно, используя одну инструкцию MySQL, но все мои попытки использовать GROUP_CONCAT и UNION потерпели неудачу.

Спасибо за любые указания / помощь.

Комментарии:

1. что именно это были за попытки? и как они потерпели неудачу? было бы неплохо, если бы вы продемонстрировали свои усилия, и нам не пришлось начинать с нуля

Ответ №1:

Попробуйте это :

 SELECT CONCAT(GROUP_CONCAT(t1.keywords),',',GROUP_CONCAT(t2.keywords)) keywords FROM table1 t1, table2 t2
  

Если вы не хотите повторяющихся значений, тогда это будет так :

 SELECT GROUP_CONCAT(DISTINCT t.keywords) FROM (
    SELECT t1.keywords FROM table1 t1
    UNION
    SELECT t2.keywords FROM table1 t2
) t
  

Комментарии:

1. Это работает, за исключением того, что добавляется множество дубликатов, которых нет в реальной базе данных. Например, ключевое слово «news» содержится в 2 записях, но приведенное выше возвращает его с 24 записями!

Ответ №2:

Это так просто:

 SELECT GROUP_CONCAT(keywords) keywords FROM table1
UNION
SELECT GROUP_CONCAT(keywords) keywords FROM table2
  

Вот скрипка.

Комментарии:

1. На самом деле это было то, что я попробовал сначала, но проблема в том, что он возвращает 2 строки вместо одной.

2. Вы получаете все ключевые слова в одной строке. Вы проверили мою скрипку?

3. Да, ваша скрипка работает отлично, но когда я запускаю свою реальную базу данных, она по какой-то причине возвращает 2 строки.