使用MySQL,我可以做这样的事情:
SELECThobbiesFROMpeoples_hobbiesWHEREperson_id= 5;
我的输出:
shopping
fishing
coding
但我只想要1行,1列:
预期产出:
shopping,fishing,coding
原因是我从多个表中选择多个值,并且在所有连接之后,我得到的行数比我想要的多得多。
我找了一个功能MySQL的文件,它不会看起来像CONCAT或CONCAT_WS函数接受结果集,那么有谁知道这里如何做到这一点?
SELECTperson_id,GROUP_CONCAT(hobbies SEPARATOR', ')
FROMpeoples_hobbiesGROUP BYperson_id
正如路德维格在评论中所述,您可以添加DISTINCT运算符以避免重复:
SELECTperson_id,GROUP_CONCAT(DISTINCThobbies SEPARATOR', ')
FROMpeoples_hobbiesGROUP BYperson_id
正如Jan在她/他的评论中所述,您也可以在使用它之前对值进行排序ORDER BY:
SELECTperson_id,GROUP_CONCAT(hobbiesORDER BYhobbiesASCSEPARATOR', ')
FROMpeoples_hobbiesGROUP BYperson_id
正如Dag在他的评论中所述,结果有1024字节的限制。要解决此问题,请在查询之前运行此查询:
SETgroup_concat_max_len= 2048
当然,您可以2048根据自己的需求进行更改。计算并分配值:
SETgroup_concat_max_len=CAST(
(SELECTSUM(LENGTH(hobbies)) +COUNT(*) *LENGTH(', ')
FROMpeoples_hobbiesGROUP BYperson_id)
ASUNSIGNED)
看看GROUP_CONCAT你的MySQL版本(4.1)是否支持它。有关更多详情,请参阅文档。
它看起来像这样:
SELECTGROUP_CONCAT(hobbies SEPARATOR', ')
FROMpeoples_hobbiesWHEREperson_id= 5
GROUP BY 'all';
用于连接多个单独行的替代语法
警告:这篇文章会让你感到饥饿。
鉴于:
我发现自己想要选择多个单独的行 – 而不是一个组 – 并在某个字段上进行连接。
假设您有一张产品ID及其名称和价格表:
+------------+--------------------+-------+
|product_id|name|price|
+------------+--------------------+-------+
| 13 | Double Double | 5 |
| 14 |Neapolitan Shake| 2 |
| 15 |Animal Style Fries| 3 |
| 16 |Root Beer| 2 |
| 17 |Lame T-Shirt| 15 |
+------------+--------------------+-------+
然后你有一些花哨的schmacy ajax,把这些小狗列为复选框。
您的饥饿的河马用户选择13, 15, 16。今天没有甜点给她…
找:
使用纯粹的mysql在一行中总结用户订单的一种方法。
解:
使用GROUP_CONCAT与该IN条款:
mysql> SELECTGROUP_CONCAT(name SEPARATOR' + ') ASorder_summaryFROMproductWHEREproduct_idIN (13, 15, 16);
哪些输出:
+------------------------------------------------+
|order_summary|
+------------------------------------------------+
| Double Double +Animal Style Fries+Root Beer|
+------------------------------------------------+
奖励解决方案:
如果你想要总价格,可以折腾SUM():
mysql> SELECTGROUP_CONCAT(name SEPARATOR' + ') ASorder_summary,SUM(price) AStotalFROMproductWHEREproduct_idIN (13, 15, 16);
+------------------------------------------------+-------+
|order_summary|total|
+------------------------------------------------+-------+
| Double Double +Animal Style Fries+Root Beer| 10 |
+------------------------------------------------+-------+
PS:如果您在附近没有In-N Out,请致歉…