我写了这个查询,但是我收到以下错误:
致命错误:未捕获的异常' PDOException'与消息 ' SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误;查看与您的手册相对应的手册 MariaDB服务器版本,用于在BEGIN INSERT附近使用正确的语法 INTO
forum_topics_track
(userid
,topic_id
,`c'在第3行
我想这是自我解释的,但我的目标是检查记录是否存在以及是否存在,以便插入记录。
IF NOT EXISTS
(SELECT * FROM `forum_topics_track` WHERE `userid` = '{$userid}' AND `topic_id` = '{$topic_id}')
BEGIN
INSERT INTO `forum_topics_track` (`userid`, `topic_id`, `category_id`)
VALUES ('{$topic_id}', '{$category_id}', '{$userid}')
END;
答案 0 :(得分:1)
更快的替代方案是在userid
和topic_id
上设置独特的索引。
CREATE UNIQUE INDEX forum_topics_track_ndx ON forum_topics_track(userid, topic_id);
然后你可以做
INSERT IGNORE INTO `forum_topics_track` (`userid`, `topic_id`, `category_id`)
VALUES ('{$topic_id}', '{$category_id}', '{$userid}');
总是会成功(如果数据已存在则可能无效)。
或者您可以查看ON DUPLICATE KEY UPDATE
技巧。
答案 1 :(得分:1)
这是实现逻辑的错误方法。如果您希望每个用户和主题一次显示在<div class="container">
<div class="box lime full"></div>
<div class="box dark_blue"></div>
<div class="box light_blue fifthish"></div>
<div class="box green fifthish"></div>
<div class="box red half"></div>
<div class="box orange half"></div>
<div class="box teal full"></div>
</div>
中,则让数据库强制执行约束。使用唯一索引或约束很容易:
forum_topics_track
然后,您可以执行插入并忽略或处理错误:
create unique index unq_forum_topics_track_user_topic on forum_topics_track(user_id, topic_id);
逻辑中不需要INSERT INTO `forum_topics_track` (`userid`, `topic_id`, `category_id`)
VALUES ('{$topic_id}', '{$category_id}', '{$userid}')
ON DUPLICATE KEY UPDATE userid = VALUES(userid);
。实际上,使用IF
只会因竞争条件而引发问题,并且不能保证数据库中的任何内容。
答案 2 :(得分:0)
IF NOT EXISTS是一个可用于MS-SQL但不能用于MySQL的子句。请尝试以下查询。
// works only if you are using jQuery
element.find('.parent');
// for JQLite, the find method is limited to lookup by tag name:
element.find('div');