首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GROUP_CONCAT,但具有获取多行的限制

GROUP_CONCAT,但具有获取多行的限制
EN

Stack Overflow用户
提问于 2013-04-18 16:29:09
回答 1查看 512关注 0票数 2

我正在为我管理的PtokaX DC集线器上的用户开发一个小的混乱的单词游戏。为此,我将单词列表存储在一个MySQL表中。表模式如下:

代码语言:javascript
复制
CREATE TABLE `jumblewords` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `word` CHAR(15) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `word` (`word`)
)
COMMENT='List of words to be used for jumble game.'
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

现在,在游戏引擎中,我想随机获取20个单词作为一个字符串。我可以使用类似于下面这样的查询来实现:

代码语言:javascript
复制
SELECT GROUP_CONCAT(f.word SEPARATOR ', ' )
FROM ( SELECT j.word AS word
    FROM jumblewords j
    ORDER BY RAND()
    LIMIT 20) f

但每次列表过期时,我都必须执行此语句(所有20个单词都已放在user之前)。

我是否可以修改这个查询,以便可以使用上面查询生成的结果提取多个行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-27 20:43:48

解决这个问题的一种更简单的方法可能是将随机字存储在临时表中,然后提取这些值。存储过程就是最好的选择。

代码语言:javascript
复制
DELIMITER //
DROP PROCEDURE IF EXISTS sp_jumblewords //
CREATE PROCEDURE sp_jumblewords(no_lines INT)
BEGIN

    DROP TABLE IF EXISTS tmp_jumblewords;
    CREATE TEMPORARY TABLE tmp_jumblewords (
        `word` VARCHAR(340) NOT NULL);

    REPEAT 
        INSERT INTO tmp_jumblewords 
        SELECT GROUP_CONCAT(f.word SEPARATOR ', ' )
        FROM ( SELECT j.word AS word
                FROM jumblewords j
            ORDER BY RAND()
                LIMIT 20) f;

        SET no_lines = no_lines - 1;
        UNTIL no_lines = 0
    END REPEAT;

    SELECT * FROM tmp_jumblewords;

END //
DELIMITER ;

CALL sp_jumblewords(20);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16249158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档