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

时间:2013-08-27 11:49:01

标签: php mysql

我是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

有任何想法或建议吗?感谢。

3 个答案:

答案 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,请取消注释第二行。

Prework

设置$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。