2012-10-05 48 views
0

在这里,我面临着一个与group_concat有关的巨大问题,因为当我使用这个总记录不能从基于事务ID的表中获取 这里是我的存储过程代码在部份我使用所谓strSplit拆分功能很迫切的任何一个可以帮我这个严重的问题,对我来说group_concat创建一个问题获取多个记录


BEGIN 

DECLARE iCount int; 

DECLARE i int; 

DECLARE txn VARCHAR(65000); 

DECLARE txId VARCHAR(17); 

CREATE TEMPORARY TABLE report_transaction (client_id INT NOT NULL AUTO_INCREMENT, productName VARCHAR(200), itxnId VARCHAR(100),PRIMARY KEY(client_id)); 

select count(distinct(tt.TxnId)) into iCount from tbl_transaction tt; 

SELECT group_concat(distinct((tt.TxnId)) separator ', ') product into txn from tbl_transaction tt; 

SET i=1; 

WHILE i<iCount+1 DO 

select strSplit(txn, ',', i) into txId; 

SELECT RTRIM(LTRIM(txId)); 

INSERT INTO report_transaction(productName,itxnId) select group_concat((tt.ProductName) separator ',') products,tt.TxnId from tbl_transaction tt where tt.TxnId= txId; 

    SET i = i + 1; 

END WHILE; 

    SELECT * FROM report_transaction; 
    drop table report_transaction; 

END 

Iwant导致像一个表的记录,但只显示第一个记录,然后等领域为空

回答

0

I想你想要的东西可以通过一个单一的查询来实现:

INSERT INTO report_transaction(productName,itxnId) 
    select group_concat((tt.ProductName) separator ',') as products, tt.TxnId 
    from tbl_transaction tt 
    group by tt.TxnId; 

你不需要临时表来存储的ID,或修剪或拆分任何东西。

一般而言,通过在适当的时候使用SQL查询,您将获得更好的性能。顺便说一下,如果你确实需要遍历表中的行,那么你应该了解游标。

+0

没有它产生相同的结果 – user1161960

+0

你应该修改你的问题,或问另一个,包括样本数据和结果。 –

+0

先生,我的问题是函数group_concat产生一次输出在哪里条件如何解决它 – user1161960