基于以下数组使用的Multi-Update语句

Multi Update statement using based off the following array

本文关键字:Multi-Update 语句 数组      更新时间:2023-09-26

我有一个名为sched的表,需要根据需要进行更新。

目前,我创建了一个HTML输出,它输出sched表的当前值,供用户根据自己的意愿进行编辑。我还准备了一些脚本来收集这些更改,并通过ajax/PHP发送它们来更新所述数据库表。

我已经发送了两个单独的数组,并使用array_combine()将它们连接起来。

发送到PHP并通过PHP进行组合的结果示例:

            [locationID_1] => 4~West
            [instructorID_1] => 12~Kasey
            [roomID_1] => 7~Studio 1
            [classtypeID_1] => 9~Yoga
            [weekdayID_1] => 5~Friday
            [time_1] => 05:25
            [start_date_1] => 2014-09-01
            [end_date_1] => 2014-09-27
            [locationID_12] => 2~Oaks
            [roomID_12] => 2~Body Room
            [instructorID_12] => 3~Susan
            [classtypeID_12] => 13~Fitness
            [weekdayID_12] => 2~Tuesday
            [time_12] => 05:25
            [start_date_12] => 2014-09-03
            [end_date_12] => 2014-09-28

因此,对于最后一个键值对,列名可以被认为是每个键的第一部分(对于最后一项):

UPDATE sched SET
end_date=2014-09-28
WHERE schedID=12

因此,为了进一步说明这个例子,[]括号内的数字指定了要更新的表的行的id(12,sched)。

用下划线分隔的位是列的名称(end_date)。

在ajax发布之前,分配给每个键的值都是用它自己的id来拼凑的,这个id是从它自己的db表中检索的。

我的问题是如何最好地使用所描述的方法更新目标数据库表中的任意数量的行。

我知道在javascript等中透露这么多数据库信息会有很多安全问题,但这更像是一个有趣和学习的项目(尤其是因为我自己教这个)。

要善良,但要有见识——我听到的是学习和进步。

谢谢D

据我所知,您需要创建动态更新语句。那么为什么不创建一个简单的服务器端页面并将数据发布到该页面,然后使用下面的查询呢

INSERT INTO sched({COLUMN_NAMES}) VALUES({COLUMN_VALUES}) ON DUPLICATE KEY UPDATE;

希望这对你有帮助。

与其组合数组,我建议使用更像以下的数据结构。从人类和算法的角度来看,数据更干净、更容易访问。

    $sched = array
    (
        1 => array
        (
            'locationID' => '4~West',
            'roomID' => '7~Studio 1',
            'instructorID' => '12~Kasey',
            'classtypeID' => '9~Yoga',
            'weekdayID' => '5~Friday',
            'time' => '05:25',
            'start_date' => '2014-09-01',
            'end_date' => '2014-09-27'
        ),
        12 => array
        (
            'locationID' => '2~Oaks',
            'roomID' => '2~Body Room',
            'instructorID' => '3~Susan',
            'classtypeID' => '13~Fitness',
            'weekdayID' => '2~Tuesday',
            'time' => '05:25',
            'start_date' => '2014-09-03',
            'end_date' => '2014-09-28'
        )
    );

然后像这样循环:

    foreach ($sched as $id => $data)
    {
        $query = "UPDATE sched SET ";
        $sets = array();
        foreach ($data as $k => $v)
            $sets[] = "$k = '$v'";
        $query .= implode(', ', $sets) . " WHERE schedID = $id";
        // do something with query
    }