【问题标题】:insert if row do not exists else update row如果行不存在则插入,否则更新行
【发布时间】:2020-03-04 11:08:58
【问题描述】:

我在投票表中有自动递增字段,用户可以在其中对帖子投赞成票和反对票。如果用户请求对帖子进行投票,我想检查表格以查看他们是否已经投票(反对或赞成)。

如果用户已经投反对票并且插入了一条记录,这次他想更改为投赞成票:我只想更新记录并将投票状态设置为 1,同样如果用户请求投反对票并且同一用户插入一条记录,然后只需更新记录并将列状态设置为 0。

我写了一个 SQL 来完成这项工作,但它在网络控制台下给了我错误: 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'UPDATE votes VT SET 附近使用的正确语法 VT.vote_status = '1', VT.vote_time='1583319756' ' 在第 8 行

我搜索了几个示例,但似乎没有用。我不想在 DUPLICATE KEY 上使用 sql 我只为重复的唯一键阅读过它。

我想检查2或3列是否与我要插入的记录相同,然后更新其他插入。

我如何做到这一点?

我的代码:

IF EXISTS (
                SELECT * FROM $votes_table VT WHERE VT.vote_ask_id='{$Qid}' 
                AND VT.vote_type='{$vote_type}' 
                AND VT.vote_status='{$vote_down_status}'
                AND VT.vote_user_id='{$CUid}'

                ) 
    UPDATE  $votes_table VT SET 
            VT.vote_status = '{$vote_up_status}',
            VT.vote_time='{$current_time}' 
            WHERE VT.vote_user_id = '{$CUid}' 
            AND VT.vote_ask_id = '{$Qid}' 

    ELSE    INSERT INTO $votes_table(vote_ask_id,vote_type,vote_status,vote_user_id,vote_time) 
            VALUES('{$Qid}','{$vote_type}','{$vote_up_status}','{$CUid}','{$current_time}')

【问题讨论】:

  • 使用:INSERT INTO .... ON DUPLICATE KEY UPDATE ....
  • ...或替换成。

标签: mysql insert sql-update


【解决方案1】:

我建议您更改函数更新和插入。 您可以使用“合并到”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多