mysql group_concat 逗号分隔的 id 以匹配名称

标签 mysql join group-by group-concat

我写这个查询是为了查找销售什么类别的商店列表。

SELECT GROUP_CONCAT(distinct(sub_category_id)) AS s,
             vendor_id AS v
      FROM link_products_lists_vendors 
      GROUP BY vendor_id;

这导致,

+---------------------------------------+------------+
| category_ids                          | vendor_ids |
+---------------------------------------+------------+
| 24,28,25,16,26,23,27,2                |          3 |
| 2                                     |         67 |
| 19,28,17,16,20,2                      |         68 |
| 19,28,24,26,23,21,16,27,22,17,25,2    |        122 |
| 16,2                                  |        123 |
| 28,17,22,21,18,16,26,27,20,23,25,2    |        124 |
| 22,19,21,20,16,24,28,25,23,26,2       |        125 |
| 23,24,26,25,28,16,20,27,19,2          |        126 |
| 19,26,28,18,20,27,22,16               |        127 |
| 22,26,28,21,23,20,24,19,16,17,27,25,2 |        128 |
| 2                                     |        129 |
| 2                                     |        133 |
| 19,20,28,16,27,25,21,23,26,24,22      |        135 |
| 23,28,17,22,26,21,16,20,27,24,25,2    |        136 |
| 19,17,16,21,23,26,22,25,27,20,28      |        137 |
| 19,20,26,22,21,24,23,17,28,16,27,25,2 |        138 |
| 19,20,23,28,26,21,24,16,27,22,25,17,2 |        139 |
| 22,27,20,21,24,17,23,28,26,19,25,2    |        142 |
| 19,28,17,20,2                         |        143 |
+---------------------------------------+------------+
19 rows in set (0.01 sec)

我现在想要的是,

+--------------------------  -----------+--- ----------+
| category_names                        | vendor_names |
+---------------------------------------+--------------+
| mobiles,laptops,desktops              |    abcShop   |
| mobiles                               |    xyzShop   |
| desktops,mouses,keyboards             |    pqrShop   |
+---------------------------------------+--------------+

我有类别表,

+----+---------------+
| id | name          |
+----+---------------+
| 17 | desktops      |
| 18 | external_hdds |
| 26 | headphones    |
| 27 | headsets      |
| 22 | keyboards     |
| 16 | laptops       |
| 24 | memory_cards  |
|  2 | mobile-phones |
| 21 | mouses        |
| 25 | pendrives     |
| 19 | printers      |
| 20 | routers       |
| 23 | speakers      |
| 28 | tablets       |
+----+---------------+

供应商表为,

+-----+----------------------+
| id  | name                 |
+-----+----------------------+
| 108 | abcShop              |
| 109 | xyzShop              |
|  45 | pqrShop              |
|  89 | .                    |
|  63 | .                    |
|  64 | .                    |
+-----+----------------------+

我应该如何编写一个不显示ids但使用显示ids和显示名称的表的查询?我不知道从哪里开始。请帮忙!

最佳答案

只需加入其他表并改为选择那些值

SELECT GROUP_CONCAT(distinct(c.name)) AS s,
       v.name AS v
  FROM link_products_lists_vendors l
  JOIN categories c on l.category_id = c.id
  JOIN vendors v on l.vendor_id = v.id
 GROUP BY v.name;

只要供应商名称和描述名称是唯一的,这就有效。

关于mysql group_concat 逗号分隔的 id 以匹配名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17487235/

相关文章:

mysql - mysql 5.7 的查询结果无效

mysql - 无法通过套接字连接到本地 MySQL 服务器(使用 Plesk)

mysql - 不同版本表上的 SQL 连接

python - Pandas groupby 自定义函数到每个系列

mysql - 用于查找具有特定属性的项目和相关非外键项目的 SQL 查询

MySQL REPLACE 语句不正确? "A new statement was found, but no delimiter"

mysql - SQL 连接查询尝试

php - MySQL:加入具有多行数据的表

php - 在 MySQL 中按特定关键字对结果进行分组?

mysql - 如何在mysql中找到组的总和并找到权重?