2013-07-05 45 views
1

我写了这个查询来找到销售什么类别的商店列表。mysql group_concat逗号分隔的ID匹配名称

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 | .     | 
+-----+----------------------+ 

我应该如何编写一个不会显示标识的查询,而是使用显示标识和显示名称的表格?我不知道从哪里开始。请帮忙!

回答

3

刚刚加入其他表中,选择那些价值,而不是

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; 

这个工作,只要供应商名称和描述名称是唯一的。

+0

v.name和v.id之间的区别是什么..我认为没有名称是唯一的..我使用v.id ...任何方式它的工作..谢谢.. – beck03076

+0

这是一个很好的做法只包含SELECT部分​​中的东西,它是聚合或GROUP BY的一部分。 –