![](/img/trans.png)
[英]How can i display more than one row in my table USING PHP & MYSQL database
[英]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语句:
在!=“”上过滤复选框数组,然后循环遍历这些结果。 如果检查!=“”,则摆脱第一个。
扩展您的初始查询,使其包括row_exists = 0,然后遍历这些结果。 那摆脱了第二个如果。
实际上,您可以将两个sql语句合并为一个复合条件插入。 您可以插入以下形式:
INSERT INTO table (SELECT ...)
因此,您可以看一下第一个查询并将其改编/替换为上面查询的SELECT ...部分,然后将第二个插入并改编/替换为上面的INSERT INTO...。
因此,如果一个用户可以与多个项目相关联,您似乎应该对此进行规范化,并且可能具有三个表-一个用于用户,一个用于项目以及一个将用户与项目相关的多对多表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.