SQL объединяет несколько значений из столбца в одну ячейку - PullRequest
2 голосов
/ 20 июля 2009

Уже есть тонна sql join q, но я не вижу своего ответа, так что здесь. , , Я работаю с WPDB (база данных Wordpress) / EZSql / MySQL 5.0. Попытка достичь «простого» желаемого результата ниже не оказалась легкой.

Токовый выход

MemberID          MemberName              FruitName
--------------    ---------------------   --------------
1                  Al                     Apple
1                  Al                     Cherry

Желаемый вывод

MemberID           MemberName            FruitName
-----------        --------------        ------------
1                  Al                    Apple, Cherry

MemberID получен из таблицы a, MemberName - из таблицы a и таблицы b, а FruitName - из таблицы b. Поскольку я вывожу много других столбцов из таблицы a, я «оставил объединенные» две таблицы с помощью этого запроса:

$contents = $wpdb->get_results( $wpdb->prepare("SELECT * FROM a LEFT JOIN b ON a.MemberName = b.MemberName"));

Позже я печатаю столбцы с помощью echo:

        <td><?php echo $content->MemberID ?></td>
        <td><?php echo $content->MemberName ?></td>
        <td><?php echo $content->FruitName ?></td>

Полагаю, мне следует попытаться запросить / объединить две таблицы по-разному, хотя возможно будет творчески подходить к печати столбцов. Я нашел это обсуждение здесь и смоделировал мой вопрос после него, но я не понимаю их решения и надеюсь на что-то более простое.

Ответы [ 5 ]

4 голосов
/ 20 июля 2009

GROUP BY MemberName и GROUP_CONCAT (FruitName). Например,

SELECT MemberId, MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName;
2 голосов
/ 20 июля 2009

Учитывая, что вы используете mySQL, я считаю, что функция group_concat сделает именно то, что вы ищете:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

1 голос
/ 20 июля 2009
SELECT MemberID, MemberName, GROUP_CONCAT(FruitName SEPARATOR ',') FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY MemberID, MemberName;
0 голосов
/ 13 февраля 2014

@ Адам Я знаю, что может быть поздно отвечать, но я столкнулся с той же проблемой, поэтому вот мое решение расширить ответ Майка и решить несколько одинаковых случаев:

SELECT MemberId, MemberName, GROUP_CONCAT(distinct FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName;

Таким образом, в основном вам просто нужно добавить «отличный» в функцию GROUP_CONCAT.

Надеюсь, это поможет.

0 голосов
/ 20 июля 2009

Один из способов - зациклить и построить вывод в PHP (или на любом другом языке, который вы используете).

Либо объедините фрукты при извлечении строк из базы данных, либо при представлении их пользователю. Я бы предложил последнее, так как это больше проблема логики представления, чем что-либо еще.

Если вы хотите сделать это в SQL, вам придется либо создать свою собственную (я не верю, что MySQL имеет встроенную, но я могу ошибаться) агрегатную функцию для объединения строк. Это не так тривиально.

Если вы выбираете только один элемент, вы также можете сделать это в SQL, используя переменную, я не знаю точный синтаксис MySQL, но для MSSQL это будет примерно так:

DECLARE @frutis VARCHAR(MAX)

SELECT @fruits = ISNULL(@fruits + ', ' + FruitName, FruitName)
FROM ... 

SELECT @fruits
...