我想将表单中的多个记录插入名为“user”的表中,表单中提交的“items”值不存在于另一个表名“order”中。 'order'表中只有2个字段是id和items。
这是我的代码:
INSERT INTO user (id, username, email, address, items)
SELECT '$username1', '$email1', '$address1', '$items1'
UNION ALL
SELECT '$username2', '$email2', '$address2', '$items2'
UNION ALL
SELECT '$username3', '$email3', '$address3', '$items3'
FROM DUAL
WHERE NOT EXISTS(SELECT item FROM order)
让我们说'items'表包含2个设置数据:
id items
1 table01
2 chair01
所以当我用以下内容插入数据时
john, john@hotmail.com, 12, Street, nail01
jennifer, jennifer@yahoo.com, 13, Street, table01
peter, peter@live.com, 14, Street, spoon01
(defintely these data are keyin in the form)
假设第二条记录不会插入“用户”表格,因为“项目”表中已包含此项目。 但现在结果是第一和第二数据将插入'用户'表而第三数据不插入。我尝试了很多次与其他代码,但仍然没有成功。
有人能给我一个建议吗? 感谢。
答案 0 :(得分:0)
我对你要做的事感到有些困惑,如果我错了就纠正我,但这是我从你的问题中理解的:
您想要从表单中将数据添加到Users表中,但您只想添加具有订单项目表项目中尚不存在的用户?
------现在确认------
这就是我要去做的事情。
所以你使用POST方法从表单中收集数据。
$ _ POST ['email']等等。你想确保收集的数据是100%干净的,所以我使用了我创建的一个小的cleanString函数......
function cleanString($var)
{
$var = strip_tags($var); //Removes all HTML tags
$var = htmlentities($var); //Converts characters into HTML entities
$var = stripslashes($var); //Removes any backslashes
return mysql_real_escape_string($var); // Escapes all special characters
}
并会像这样使用它......
$email = cleanString($_POST['email']);
$item = cleanString($_POST['item']);
等...
使用所有干净数据,您现在要检查订单表中是否存在该项目。所以沿着这些方向进行查询:
$query = "SELECT items FROM order WHERE items=".$item;
$result = mysql_query($query);
然后检查是否找到了结果
if(mysql_num_rows($result) > 0)
{
// Result found do not process...
}
else
{
// Result not found, process...
$query = "INSERT INTO user ...";
}
如果你一次性进行多次插入,你可以将它们全部包含在while或foreach循环中,以便一次性处理它。虽然考虑到它来自一个表格,我猜你一次只能输入一个?
希望这会有所帮助。
-------添加一个while循环------
所以你想一次添加多个记录,这完全取决于你如何从表单中收集数据,给出一个确切的答案我需要更多关于如何从中收集数据的信息形成。您是否每个字段中有3个一次添加3个人,或者您是否将所有数据保存到数组中以便稍后处理?
如果你把所有东西都放到一个数组中,那么沿着这些方向的东西就会起作用foreach ($array as $user)
{
$item = $user['item']
etc...
$query = "SELECT items FROM order WHERE items=".$item;
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
// Result found do not process...
}
else
{
// Result not found, process...
$query = "INSERT INTO user ...";
}
}
这将逐个接受每个用户,获取该用户的所有数据,检查该项是否存在,然后处理它是否存在。
您也可以使用while循环执行此操作,但这种方式很难在不知道如何获取数据的情况下解释
答案 1 :(得分:0)
这看起来像是Oracle语法......是吗?
INSERT INTO user (id, username, email, address, items)
您需要插入ID但不要执行此操作。如果它由序列和触发器填充,那就没关系,但不需要插入它。
INSERT INTO user (username, email, address, items)
SELECT '$username1', '$email1', '$address1', '$items1'
UNION ALL
SELECT '$username2', '$email2', '$address2', '$items2'
UNION ALL
SELECT '$username3', '$email3', '$address3', '$items3'
FROM DUAL
WHERE NOT EXISTS(SELECT item FROM order)
可能你的意思是
INSERT INTO user (username, email, address, items)
SELECT username, email, address, items FROM (
SELECT '$username1' username, '$email1' email, '$address1' address, '$items1' items
FROM DUAL
UNION ALL
SELECT '$username2' username, '$email2' email, '$address2' address, '$items2' items
FROM DUAL
UNION ALL
SELECT '$username3' username, '$email3' email, '$address3' address, '$items3' items
FROM DUAL
) a
WHERE NOT EXISTS(SELECT 1 FROM order WHERE a.items = items)
如果您的表'order'在'items'列上定义了Unique键,那么是,当您尝试插入新项时,插入将失败。更好的做法是首先查询您的订单表以检查此项是否已存在,如果不存在,则创建它。
就像AdriftUniform所说,需要更清晰的信息!