Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133247
  • 博文数量: 26
  • 博客积分: 811
  • 博客等级: 军士长
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-15 10:07
文章分类

全部博文(26)

文章存档

2012年(12)

2011年(14)

我的朋友

分类: Mysql/postgreSQL

2011-12-26 15:15:25

1、笨方法:游标+CONCAT_WS
示例:
 CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_Roster_SELECT_BY_ID`(
    IN pPK_RosterID bigint
    )
BEGIN

    DECLARE tempGN varchar(16);
    DECLARE rstGroupName varchar(128);  #联系人组结果列表,以“\n”分隔。   
    DECLARE noMore int;
   
    DECLARE curGN CURSOR FOR
            SELECT `F_GroupName` FROM `TS_RosterGroup` WHERE `PK_RosterID` = pPK_RosterID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET noMore = 1;

    ###获取联系人组列表
    SET rstGroupName = NULL;
    SET noMore = 0;  

    OPEN curGN;   
        FETCH curGN INTO tempGN;
                WHILE noMore <> 1 DO
                        SET rstGroupName = CONCAT_WS('\n', rstGroupName, tempGN);
                        FETCH curGN INTO tempGN;
                END WHILE;
    CLOSE curGN;
       
    ###返回结果。XMPP规定联系人可以不属于任何一个组。     
    SELECT TS_Roster.*, rstGroupName AS F_GroupName
    FROM
        `TS_Roster`
    WHERE
        `PK_RosterID` =  pPK_RosterID;
 
END;

2、Mysql特有函数:GROUP_CONCAT
示例:
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_Roster_SELECT_BY_ID`(
    IN pPK_RosterID bigint
    )
BEGIN
    SELECT TS_Roster.*, GROUP_CONCAT(F_GroupName SEPARATOR'\n')
    FROM TS_Roster LEFT JOIN TS_RosterGroup ON TS_Roster.PK_RosterID = TS_RosterGroup.PK_RosterID
    WHERE
        TS_Roster.PK_RosterID  =  pPK_RosterID
    GROUP BY TS_Roster.PK_RosterID
    ;
 
END;
阅读(6254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~