Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果字段为空,则将MySQL行与前一行合并_Mysql_Csv_Where_Rows - Fatal编程技术网

如果字段为空,则将MySQL行与前一行合并

如果字段为空,则将MySQL行与前一行合并,mysql,csv,where,rows,Mysql,Csv,Where,Rows,我正在尝试使用一个MySQL数据库,它的描述分布在多行上(从CSV文件导入),并将除描述以外的所有内容都为空的行组合起来,以完成描述字段 从这一点开始: ID PLU Description 100 1 Line 1 101 Line 2 102 2 Line 3 103 3 Line 4 105 Line 5 106 Line 6 试着把它变成这样: ID PLU

我正在尝试使用一个MySQL数据库,它的描述分布在多行上(从CSV文件导入),并将除描述以外的所有内容都为空的行组合起来,以完成描述字段

从这一点开始:

ID    PLU     Description
100   1       Line 1
101           Line 2
102   2       Line 3
103   3       Line 4
105           Line 5
106           Line 6
试着把它变成这样:

ID    PLU     Description
100   1       Line 1 Line 2
102   2       Line 3
103   3       Line 4 Line 5 Line 6
任何想法都将不胜感激

编辑:
为了添加一些背景信息,我收到了一份以CSV格式发送的价目表,不幸的是,我无法更改传入的格式。如果一个项目的描述太长,它将在下一个单元格中继续,留下许多只包含描述的行。我希望找到一种方法,将单独的描述行附加到作为有效行一部分的描述中。如果在数据仍然是CSV的情况下有更简单的方法,我当然也愿意这样做。

请参阅我的原始评论,但这可能有用:

SET @prevPLU := 0;
SET @firstID := 0;
SELECT MIN(ID) AS ID
, @prevPLU := IF(PLU='',@prevPLU, PLU) AS actualPLU
, GROUP_CONCAT(Description ORDER BY ID SEPARATOR ' ') AS Description
FROM theTable
GROUP BY actualPLU
;

为此,有两个步骤:

首先,您需要填写缺少的PLU值。正如其他人在评论中所说,如果可能的话,您应该在加载数据时这样做。如果必须使用SQL,那么下面是如何()让我强调一下,这是一个卑鄙的黑客行为,因为它违反了SQL的声明式工作方式

SELECT ID, 
       CASE WHEN PLU IS NOT NULL
             THEN @prev:=PLU
             ELSE @prev END PLU, 
       Description
  FROM tbl
  JOIN (SELECT @prev:=NULL) init
 ORDER BY ID
接下来,使用GROUPBY汇总此子查询/虚拟表。()


为什么PLU是空白的,从定义上来说,这几乎是糟糕的数据。听起来你可以在导入之前或导入时快速而简单地做一些事情。你能分享原始格式吗?我只是想大声说出来,如果你得到的csv文件在excel中正确打开(excel在这方面非常好),只要导入正确的格式。我认为这比编写复杂的sql代码来获得完整的描述要好得多。@NKD我添加了一些背景知识,试图更好地解释我在做什么。@Ar3n您能提供csv格式的示例(可能有2条记录)吗?我希望得到一个csv版本的示例,看看我是否可以帮助您想出一种在加载之前/加载时清理它的方法。最好是避免数据库中的坏数据完整性。我在op中添加了一些背景信息(作为对您原始评论的回应)。
 SELECT MIN(ID) ID,
        PLU,
        GROUP_CONCAT(Description ORDER BY Description SEPARATOR ' ') Description
  FROM (
       SELECT ID, 
              CASE WHEN PLU IS NOT NULL
                   THEN @prev:=PLU
                   ELSE @prev END PLU, 
              Description
         FROM tbl
         JOIN (SELECT @prev:=NULL) init
        ORDER BY ID
       ) t
 GROUP BY PLU