在laravel

时间:2017-07-07 01:26:18

标签: php mysql laravel optimization pivot

我有一个问题,我需要将旧表迁移到新表。像这样的旧表数据示例:

旧表(离开表格)

Id User_id原因日期
1 100发烧29/01/2013
2 100发烧30/01/2013
3 100发烧31/01/2013
4 100发烧01/02/2013

新表(离开表格)

Id User_id原因开始日期结束日期
1 100 Fever 29/01/2013 01/02/2013


有没有办法可以迭代旧表并像新表那样存储。?

29/01/2013 - 01/02/2013产生4行..新表需要1行,其中开始日期和结束日期为29/01/2013为开始日期,01/02/2013为结束日期

我已经创建了新表。我只想迭代旧表的列表并将其插入到具有开始日期和结束日期的新表中。

2 个答案:

答案 0 :(得分:0)

您可以将Date列重命名为Start Date并添加新列End Date

Schema::table('users', function($table)
{
    $table->renameColumn('Date', 'Start Date');
    $table->dateTime('End Date');
});

答案 1 :(得分:0)

INSERT INTO new_table
    (user_id, reason, start_date, end_date)
    SELECT user_id, reason
           MIN(Date), MAX(Date)
        FROM old_table
        GROUP BY user_id, reason;

我遗漏了id,假设它是AUTO_INCREMENT。但是拥有PRIMARY KEY(user_id, reason)可能更有意义。

您没有说原始行是连续的',也没有说同一个用户可以拥有或不拥有相同reason的多个字符串。所以,也许我还没有解决真正的问题。在这种情况下,请更准确地编辑您的问题。