只需单击一个提交按钮,即可将多行插入DB

时间:2010-10-05 17:20:03

标签: php mysql

我有一点问题,希望你能帮我解决。

首先,我所涉及的数据库表如下所示:

+---------------+--------------+------+-----+-------------------+----------------+
| Field         | Type         | Null | Key | Default           | Extra          |
+---------------+--------------+------+-----+-------------------+----------------+
| id            | int(11)      | NO   | PRI | NULL              | auto_increment |
| KlubID        | varchar(11)  | NO   |     | 0                 |                |
| Medlemsnummer | varchar(11)  | NO   |     | 0                 |                |
| KlubType      | varchar(128) | NO   |     |                   |                |
| Handling      | varchar(128) | NO   |     |                   |                |
| Tidspunkt     | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+---------------+--------------+------+-----+-------------------+----------------+

假设我有 X 条目,其中“处理”等于 Y ,我可以调用结果 P 。现在我想取所有 P 并插入一行foreach P ,其中“Handling”的值现在将等于 Q 。< / p>

这里的问题是我想用一个按钮(提交)而不是多个表格进行插入。

事先感谢你的帮助。如果需要更清晰,请随时询问更多信息。

/尼基

编辑:更清晰

public static function find_todays_children() {
    global $db;
    $sql = "SELECT * 
            FROM (
                SELECT * 
                FROM Handlinger 
                AS a
                WHERE date(Tidspunkt) = curdate() 
                AND Tidspunkt = (
                    SELECT max(Tidspunkt) 
                    FROM Handlinger 
                    AS b
                    WHERE a.Medlemsnummer = b.Medlemsnummer
                    )
                )
            AS c
            ORDER BY handling DESC, medlemsnummer";
    return static::find_by_sql($sql);
}

以上查询返回以下内容。

+------+--------+---------------+----------+----------+---------------------+
| id   | KlubID | Medlemsnummer | KlubType | Handling | Tidspunkt           |
+------+--------+---------------+----------+----------+---------------------+
| 5786 | 0      | 1             | FK       | Kommet   | 2010-10-06 13:48:06 |
| 5787 | 0      | 2             | FK       | Kommet   | 2010-10-06 13:48:10 |
| 5789 | 0      | 4             | FK       | Kommet   | 2010-10-06 13:48:16 |
| 5790 | 0      | 3             | FK       | G?et     | 2010-10-06 13:48:27 |
+------+--------+---------------+----------+----------+---------------------+

然后我希望能够插入3行,其中“处理”字段是另一个值。 我可以通过PHP的HTML表单来做到这一点但我无法弄清楚如何通过只点击一次来完成所有这些... 重要的是不要插入特定“Medlemsnummer”(user_id)的最新条目已经等于“Gået”值的任何内容

我的表单如下:

...
    if(isset($action->Handling) != "Kommet") {
        $do_action = "Kommet";
    } else {
        $do_action = "Gået";
    }
...

<section>
    <form action="phineaslog_barn.php" method="post">
        <label for="Status">Klub Navn: </label>
        <input type="text" name="Medlemsnummer" value="<?php echo $child->Medlemsnummer; ?>" />
        <input type="text" name="Handling" value="<?php echo $do_action; ?>" />
        <input type="submit" name="submit" value="<?php echo $do_action; ?>" />
    </form>
</section>

3 个答案:

答案 0 :(得分:2)

我对这个问题的理解:

  • 对于作为用户最终条目的每一行,其中handling = kommet

    • 使用handling =gået,tidspunkt = now()
    • 插入另一行

所以...结合两个世界中最好的......

INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
    SELECT KlubID,Medlemsnummer,KlubType,'Gået',NOW()
    FROM Handlinger 
    AS a
    WHERE date(Tidspunkt) = curdate() 
    AND Handling = 'Kommet'
    AND Tidspunkt = (
        SELECT max(Tidspunkt) 
        FROM Handlinger 
        AS b
        WHERE a.Medlemsnummer = b.Medlemsnummer
     )

答案 1 :(得分:0)

你可以这样做:

编写方法以返回DataTable

例如:

private DataTable pResutls()
{
 do your select handling=Y;
 return DataTableWithResult; 
}

按钮点击事件

DataTable p = pResutls();
foreach(DataRow row in p)
{
   if (row["Handling"].toSring()=='Q')
   {
     then insert this row (write your method to insert)
   }

}

通过这种方式,您将需要一种方法来获得结果(处理=='y')

插入行的方法(您可以将DataRow作为参数传递并从那里执行更新)

然后从您的按钮中,您可以在一个单一的点击中完成所有操作。

答案 2 :(得分:0)

实质上,您想要运行此查询吗?

INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
SELECT KlubID,Medlemsnummer,KlubType,'Gået',NOW()
FROM tablename
WHERE Handling = 'Kommet';

或者更多用PHP:

$from = $_POST['Handling'] == 'Kommet' ? 'Kommet' : 'Gået';
$to   = $from == 'Kommet' ? 'Gået' :'Kommet';

mysql_query("
INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
SELECT t1.KlubID,t1.Medlemsnummer,t1.KlubType,'$to',NOW()
FROM tablename t1
LEFT JOIN tablename t2
ON t1.Medlemsnummer = t2.Medlemsnummer
AND t2.Tidspunkt > t1.Tidspunkt
WHERE DATE(t1.Tidspunkt) = CURDATE() AND t1.Handling = '$from' AND t2.id IS NULL");

或者除了Handling之外还有哪些行可以插入更多限制?