繁体   English   中英

如果使用一个查询而不是嵌套的复选框选中了复选框,是否可以向表中添加新行? PHP,MySQL

[英]Can I add a new row to a table if a checkbox is checked using one query rather than nested? PHP, MySQL

经过大量的努力之后,我已经使此查询正常工作-但它看上去笨拙,运行时感觉很慢。

我有一个名为UserTable的表,如果特定用户对该项目说“是”,则会填充一个名为“ Item”的字段。 在这种情况下,我只想为该项目添加一行到UserTable中-换句话说,我不想在表中有很多user_ID / Item /'no'关系,只有user_ID / Item /'yes'回应。

我建立了一些代码,向用户显示整个数据集,并允许他们更改其首选项,然后按update。 当它们更新时,将输出一个名为$ checkbox的数组,其中包含被选中为“是”的项目编号(例如“ 1”,“ 3”,“ 6”)。 如果他们没有打勾,则$ checkbox设置为“”。

这是相关的代码-正如我所说的,它很笨拙,在FOREACH中带有WHILE以及两个验证的IF语句。 我可以摆脱一个(或两个!)循环并用SELECT类型的命令替换吗?

foreach($checkbox as $value)
    {if($value!="") {
        $sql=   "SELECT count(Item) as row_exists 
                FROM UserTable
                WHERE Item = '$value' and 
                User_ID = '$current_user_id'";

        $result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));

        while ($iteminfo = mysqli_fetch_array($result)) {
            If ((int)$iteminfo['row_exists']==0) { 
                    $sql = "INSERT INTO UserTable 
                            (User_ID,Item,Date) VALUES
                            ('$current_user_id','$value',now() )";
            $add_new_row = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
            } 
        }
    }
}

提前谢谢了。

您可以消除两个if语句:

  1. 在!=“”上过滤复选框数组,然后循环遍历这些结果。 如果检查!=“”,则摆脱第一个。

  2. 扩展您的初始查询,使其包括row_exists = 0,然后遍历这些结果。 那摆脱了第二个如果。

实际上,您可以将两个sql语句合并为一个复合条件插入。 您可以插入以下形式:

INSERT INTO table (SELECT ...)

因此,您可以看一下第一个查询并将其改编/替换为上面查询的SELECT ...部分,然后将第二个插入并改编/替换为上面的INSERT INTO...。

因此,如果一个用户可以与多个项目相关联,您似乎应该对此进行规范化,并且可能具有三个表-一个用于用户,一个用于项目以及一个将用户与项目相关的多对多表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM