1

我正在制作一个博客网站,我需要在将标签插入 tblTag 之前检查标签是否存在

这就是我正在尝试的:

 $var_sqlTagsCheck = "IF (EXISTS(SELECT * FROM tblTag t WHERE t.tagName = '$var_tagCollectInsert'))
 BEGIN
    INSERT IGNORE INTO tblTag
 SET tagName = '$var_tagCollectInsert'
 END
 ELSE
 BEGIN
 INSERT INTO tblTag (tagId, tagName) VALUES ('', '$var_tagCollectInsert'))
 END
 ";

但是工作不正常,有人可以在这里给我一些帮助吗?我哪里错了,这似乎是相当直接的 SQL。

4

2 回答 2

1

尝试在WHERE子句中使用EXISTS谓词:

 INSERT INTO tblTag (tagId, tagName)
 SELECT '', '$var_tagCollectInsert'
 WHERE NOT EXISTS(SELECT * FROM tblTag t
                  WHERE t.tagName = '$var_tagCollectInsert'));

MySQL 的INSERT INTO的一般形式是:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]
于 2012-04-29T01:50:42.637 回答
0

tagId 是主键吗?如果是,则无需向其插入 '' 或空值。如果不尝试将其设置为主键并启用其自动增量,那么您只需要提供 tagName 我很确定它确实是直截了当的。因此,您应该只检查所有插入项是否具有值或可用于插入查询。

于 2012-04-29T01:50:45.303 回答