【问题标题】:if data exists then update else insert, mysql using subquery or etc [duplicate]如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]
【发布时间】:2013-08-02 01:35:34
【问题描述】:
  • 'process' 是一种预处理语句的方法
  • 'QId' & 'UnqId' 是子外键(只是一个索引)

我想使用子查询等实现mysql的一行语句(包括3个查询)

$get = $call->process("SELECT UnqId FROM table1
                     WHERE QId = ? AND UnqId = ?", 
                     array($_SESSION['Q'], $_SESSION['U']));
if($get) //if table exists
{
$call->process("UPDATE table1 SET col3 = ?, col4 = UTC_TIMESTAMP() 
              WHERE QId = ? AND UnqId = ?", 
                  array('OK', $_SESSION['Q'], $_SESSION['U']));
}
else
{
$call->process("INSERT INTO table1 VALUES (?, ?, ?, UTC_TIMESTAMP(),
               NULL, NULL, NULL, NULL)", 
                  array($_SESSION['Q'], $_SESSION['U'], 'OK'));
}

【问题讨论】:

  • 如果你使用 mysql,你可以看看INSERT ON DUPLICATE KEY UPDATE 语法,这是一件很漂亮的事情!但请注意,如果您转移数据库,这只是 mysql
  • @Dale 但我怎样才能对三个查询进行一行查询?包括 SELECT 语句..
  • 我不确定你是否可以,你会先运行你的选择然后根据我之前评论中的链接文档创建一个单行插入/更新
  • @Dale 在 sql 的子查询中有 'EXISTS' 的东西,但我不知道如何使用它..
  • 这就是 google 对我朋友的意义,祝你好运

标签: php mysql prepared-statement insert-update


【解决方案1】:

查看ON DUPLICATE KEY UPDATE 语法以在一个查询中完成。并尝试下次搜索,例如。 “mysql 更新重复”。

【讨论】:

    【解决方案2】:

    您可以使用使用ON DUPLICATE KEY UPDATE的查询

    INSERT INTO table (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE c=c+1;
    

    【讨论】:

    • 但是如何将'select'语句与其他查询结合起来
    • 你的选择只是为了检查记录是否存在吗?
    • 是的...我应该使用 'EXISTS' 的 sql 子查询的东西
    • 所以在这种情况下您不需要使用 select,ON DUPLICATE KEY UPDATE 会为您处理这些问题
    • 当然你必须用这两个字段(QId 和 UnqId)创建唯一索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2014-02-08
    • 2013-04-29
    • 2016-11-19
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多