[英]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_id
每user_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.