繁体   English   中英

如何从表中写入不存在的插入查询

[英]How write insert query with not exist from table

我是mysql的新手,需要您的帮助。

我的变量中有这个值: 46,30,22 我想检查一下save_user_id字段中的46,30,22是否存在。 存在未插入的数字(值)。

我的当前表:t5zgu_saved_user

id  user_id  saved_user_id
350  42      46
354  42      30
353  42      70
351  42      288
330  57      66
334  57      67
324  57      59

我想要这样的结果:

id  user_id  saved_user_id
355  42      22
350  42      46
354  42      30
353  42      70
351  42      288
330  57      66
334  57      67
324  57      59

如果您检查我的结果,只会添加一条记录:

id  user_id  saved_user_id

355  42      22

有什么想法或建议吗? 谢谢。

询问

INSERT INTO t5zgu_saved_user (user_id, saved_user_id)
SELECT {$user_id}, h.saved_user_id
FROM ({$str_union}) AS h
LEFT JOIN t5zgu_saved_user AS h2
ON h.saved_user_id = h2.saved_user_id
    # AND h2.user_id = {$user_id}
WHERE h2.id IS NULL

无论您要做什么,都可以使用UNIQUE键和INSERT IGNORE 在这种情况下,它将无法插入重复的值。 如果你希望它有一个独特的取消对第二个最后一行save_user_iduser_id

上班前

设置$user_id

$arr_values = array(46, 30, 22);
$arr_union = array();
for($i = 0; $i < count($arr_values); $i++)
    if ( ! $i)
        $arr_union[] = "SELECT {$arr_values[$i]} AS saved_user_id";
    else $arr_union[] = "SELECT {$arr_values[$i]}";

$str_union = implode(' UNION ', $arr_union);

对于: FROM (SELECT 46 AS saved_user_id UNION SELECT 30 UNION SELECT 22) AS h
成为: FROM ({$str_union}) AS h

参考文献

CREATE OR REPLACE TRIGGER trigger_change
BEFORE  INSERT  tablename
FOR EACH ROW
DECLARE
new_save_user_id number;
cursor c1 is select save_user_id from tablename 
BEGIN
for var in c1
loop
if (:new.save_user_id  NOT IN var.save_user_id)then
insert query
end loop; 
END;

使用save_user_id字段作为主键。否则,您可以通过代码检查数据是否存在(现有使用save_user_id),如果存在则表示阻止该数据,否则将其保存到数据库中。 例如,使用各种选择查询来获取值
从t5zgu_saved_user中选择saved_user_id,其中saved_user_id =“您的输入”;
如果ID中已经存在数据,则返回它,否则返回空结果。如果得到空结果,则意味着通过异常将其输入到DB中。

暂无
暂无

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

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