2

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

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

我当前的表: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

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

4

3 回答 3

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;
于 2013-08-27T12:01:06.190 回答
0

使用 save_user_id 字段作为主键。否则,您可以通过代码检查现有数据,无论数据(现有使用 save_user_id)是否存在。如果存在意味着阻止该数据,否则保存到数据库中。使用各种选择查询来获取值,例如
select saved_user_id from t5zgu_saved_user where saved_user_id = "Your Input";
如果数据已经与 Id 一起存在,则返回,否则返回 null 结果。如果您得到 null 结果意味着您通过异常将其输入到 DB 中。

于 2013-08-27T12:01:44.697 回答
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_idper ,请取消注释最后第二行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

参考

于 2013-08-27T11:52:41.300 回答