mysql insert - 跳过重复语法错误 - sprintf(WHERE NOT EXISTS)

时间:2016-07-01 22:49:26

标签: mysql mysqli

我想插入一行但不插入已存在的数据。是否可以通过sprint执行以下操作?我需要有关此语法的帮助。

    $insertSQL = sprintf("
    INSERT INTO post_view (trade_id, user_id, timestamp)
    VALUES (%s, %s, %s)
    SELECT trade_id,
           user_id,
           timestamp
    FROM post_view
    WHERE NOT EXISTS
        (SELECT id
         FROM post_view
         WHERE trade_id = %s
         AND user_id = %s)", 
GetSQLValueString($_GET['trade_id'], "int"),
GetSQLValueString($_SESSION['user_id'], "int"), 
GetSQLValueString(time(), "int"),
GetSQLValueString($_GET['trade_id'], "int"),
GetSQLValueString($_SESSION['user_id'], "int"));

mysqli_select_db($connection, $database_connection);
$Result = mysqli_query($connection, $insertSQL) or die(mysqli_error($connection));

目前低于错误

您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在#trade; id trade_id,user_id,timestamp FROM post_view WHERE NOT'之后使用正确的语法。在第3行

2 个答案:

答案 0 :(得分:0)

试试这个:

INSERT INTO post_view (trade_id, user_id, timestamp)
   VALUES (%s, %s, %s)
   WHERE NOT EXISTS ( SELECT *
             FROM post_view
             WHERE trade_id = %s
             AND user_id = %s);

您可能需要更改值。

答案 1 :(得分:0)

INSERT语句可以VALUES插入文字值,也可以SELECT子句从查询中获取值,但它不能同时包含这两个值。使用特殊表SELECT作为源,将所需的值放入DUAL语句中。

$insertSQL = sprintf("
    INSERT INTO post_view (trade_id, user_id, timestamp)
    SELECT %s, %s, %s
    FROM DUAL
    WHERE NOT EXISTS
        (SELECT id
         FROM post_view
         WHERE trade_id = %s
         AND user_id = %s)", 
GetSQLValueString($_GET['trade_id'], "int"),
GetSQLValueString($_SESSION['user_id'], "int"), 
GetSQLValueString(time(), "int"),
GetSQLValueString($_GET['trade_id'], "int"),
GetSQLValueString($_SESSION['user_id'], "int"));