当前位置: 首页 > 面试题库 >

MySQL中GROUP_CONCAT的对立面是什么?

甄永年
2023-03-14
问题内容

我似乎经常遇到这个问题,因为我的数据格式如下:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+

但我想要这样格式化:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+

有什么好方法吗?这种操作甚至叫做什么?


问题答案:

我认为这是您需要的(存储过程):Mysql将列字符串拆分为行

DELIMITER $$

DROP PROCEDURE IF EXISTS explode_table $$
CREATE PROCEDURE explode_table(bound VARCHAR(255))

BEGIN

DECLARE id INT DEFAULT 0;
DECLARE value TEXT;
DECLARE occurance INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE splitted_value INT;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT table1.id, table1.value
                                     FROM table1
                                     WHERE table1.value != '';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

DROP TEMPORARY TABLE IF EXISTS table2;
CREATE TEMPORARY TABLE table2(
`id` INT NOT NULL,
`value` VARCHAR(255) NOT NULL
) ENGINE=Memory;

OPEN cur1;
  read_loop: LOOP
    FETCH cur1 INTO id, value;
    IF done THEN
      LEAVE read_loop;
    END IF;

    SET occurance = (SELECT LENGTH(value)
                             - LENGTH(REPLACE(value, bound, ''))
                             +1);
    SET i=1;
    WHILE i <= occurance DO
      SET splitted_value =
      (SELECT REPLACE(SUBSTRING(SUBSTRING_INDEX(value, bound, i),
      LENGTH(SUBSTRING_INDEX(value, bound, i - 1)) + 1), ',', ''));

      INSERT INTO table2 VALUES (id, splitted_value);
      SET i = i + 1;

    END WHILE;
  END LOOP;

  SELECT * FROM table2;
 CLOSE cur1;
 END; $$


 类似资料:
  • 问题内容: 简而言之:有什么方法可以对GROUP_CONCAT语句中的值进行排序吗? 查询: 我得到这一行: 工艺品»细木工 行政管理»组织 我想要这样: 行政管理»组织 工艺品»细木工 问题答案: 当然,请参见http://dev.mysql.com/doc/refman/...tions.html#function_group- concat :

  • 问题内容: 我在查询中添加了,并终止了性能。添加之前和之后的解释计划是相同的,所以我对如何优化它感到困惑。 这是查询的简化版本: 请注意中的声明。在杀死性能。如果我注释该行并仅输出“ multiple make found”,它将很快执行。知道是什么原因造成的吗? 问题答案: 在此查询的原始非简化版本中,我们有个,它是完全不必要的,并导致group_concat出现性能问题。我不知道为什么会引起这

  • 问题内容: (注意:这个问题不是关于转义查询,而是关于转义结果) 我正在使用GROUP_CONCAT将多行合并为一个逗号分隔的列表。例如,假设我有两个(示例)表: 我想列出所有帖子以及对帖子发表评论的每个用户名的列表: 给我: 这很好用,但是如果用户名包含逗号会破坏用户列表。MySQL是否具有可以让我转义这些字符的功能?(请假定用户名可以包含任何字符,因为这只是示例架构) 问题答案: 如果用户名中

  • 问题内容: 我有2个表,用户并遵循。下表后面有一个名为状态的列。我想根据状态对每个用户进行分组的次数进行计数。 下面的查询返回每个用户的每种状态类型的记录。 返回类似: 但我想要更友好的东西: 尝试使用group_concat和计数,但没有用。有什么线索吗? 问题答案: 您需要使用GROUP BY两次,首先从下面的(user_id,status)开始获取计数,然后从连接的表到concat的user

  • 问题内容: 我从这样的farmTOanimal表进行联接。有一个类似的farmTotool表 当我在视图中连接表时,得到的结果看起来像这样 现在,我执行GROUP BY FarmID,GROUP_CONCAT(动物)和GROUP_CONCAT(工具), 但是,我真正想要的是看起来像这样的结果。我该怎么做? 问题答案: 您需要使用以下选项:

  • 问题内容: 我正在使用TABLE,需要逻辑上的帮助。 检查下面的URL以获取表结构和示例数据。 http://sqlfiddle.com/#!2/ece06/2 表格架构: 插入的数据: 询问: 输出: 预期输出: 如您所见,查询的输出包含逗号。目前,我们正在使用PHP进行字符串concat,在显示时会拆分! 还有其他方法可以拆分RESULT并在列和相同的ROW中显示每个值吗?同样的结果吗? 注意