2016-12-02 43 views
0

Iam尝试写入mysql查询。我的表结构如下:在逗号中使用相同ID的MYSQL查询记录

=========================== 
tender_id | supplier_name 
=========================== 
160001  Tata 
160005  Wilsons Limited 
160008  Tilkom LTD 
160008  DULUB LLC 
160008  DULUB LLC 
============================ 

现在我需要它应该产生如下的结果就是当过一个tender_id已经超过一个supplier_name那么它应该有一个逗号查询的帮助。 Iam不确定我是否可以通过查询来实现此目的。我知道摆脱PHP脚本这个结果,但只是想知道如果我能做到这一点与MySQL查询:

==================================== 
tender_id | supplier_name 
==================================== 
160001  Tata 
160005  Wilsons Limited 
160008  Tilkom LTD, DULUB LLC 
==================================== 

我开始用下面这个查询:

SELECT tender_id, supplier_name FROM `quotation_items` group by tender_id, supplier_name 
+0

group_concat是你需要的! – Jens

回答

0

你应该在tender_id列单独做一个GROUP BY,并使用GROUP_CONCAT到骨料供应商到CSV列表:

SELECT tender_id, GROUP_CONCAT(DISTINCT supplier_name) AS supplier_name 
FROM quotation_items 
GROUP BY tender_id 

注意,对于GROUP_CONCAT默认的分隔符是逗号,但如果你想一个不同的你可以使用SEPARATOR来指定它。

演示在这里:

SQLFiddle

+0

它的工作正常。但在某些情况下,例如tender_id 160008获得了两次相同的supplier_name。但在逗号分隔的结果中,它只能显示一次。那可能吗? 160008 Tilkom LTD,DULUB LLC –

+0

@SanjuMenon只需使用'GROUP_CONCAT(DISTINCT supplier_name)' –

+0

非常感谢,其工作正常 –

2

您需要使用GROUP CONCAT。您的查询应该是这样的:

SELECT tender_id, GROUP_CONCAT(DISTINCT supplier_name SEPARATOR ', ') 
FROM `quotation_items` 
GROUP BY tender_id; 

为避免重复名称,只需在GROUP_CONCAT函数中添加DISTINCT关键字。

1
SELECT * FROM my_table; 

结果:

+-----------+-------------------+ 
| tender_id | supplier_name  | 
+-----------+-------------------+ 
| 160001 | Tata    | 
| 160005 | Wilsons Limited | 
| 160008 | Tilkom LTD  | 
| 160008 | DULUB LLC   | 
+-----------+-------------------+ 

试试这个:

SELECT 
    tender_id, 
    GROUP_CONCAT(supplier_name SEPARATOR ", ") concated_field 
FROM my_table 
GROUP BY tender_id; 

结果:

+-----------+-------------------------+ 
| tender_id | concated_field   | 
+-----------+-------------------------+ 
| 160001 | Tata     | 
| 160005 | Wilsons Limited   | 
| 160008 | Tilkom LTD, DULUB LLC | 
+-----------+-------------------------+ 
+0

感谢您的指导。 –