我是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
有任何想法或建议吗?感谢。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
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;
答案 2 :(得分:0)
使用save_user_id字段作为主键。另外,您可以通过代码来检查现有数据是否存在数据(现有使用save_user_id)。如果存在意味着阻止该数据,否则保存到数据库中。使用各种选择查询来获取值
例如
从t5zgu_saved_user中选择saved_user_id,其中saved_user_id =“您的输入”;
如果数据已经与Id一起出现,则返回,否则返回null结果。如果得到null结果,则表示通过异常将其输入到DB else。