group_concat创建了一个用于获取多条记录的问题

时间:2012-10-05 15:22:07

标签: mysql group-concat

我遇到了与group_concat相关的问题,因为当我使用它时,总记录无法从基于transactionID的表中获取 这是我的存储过程代码。在这里我使用了一个名为strSplit的分割函数。

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

我希望结果像表记录,但它只显示第一条记录,然后其他字段为空。

1 个答案:

答案 0 :(得分:0)

我认为您想要的只需一个查询即可:

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查询可以获得更好的性能。

顺便说一句,如果你确实需要遍历表中的行,那么你应该学习游标。