簡體   English   中英

mysql insert-跳過重復語法錯誤-sprintf(不存在)

[英]mysql insert - skip duplicates syntax error - sprintf (WHERE NOT EXISTS )

我想插入一行,但不插入已經存在的數據。 是否可以通過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服務器版本相對應的手冊以獲取正確的語法,以在第3行的“ SELECT trade_id,user_id,timestamp FROM post_view WHERE NOT”附近使用

嘗試這個 :

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);

您可能需要更改值。

INSERT語句可以具有VALUES來插入文字值,也可以具有SELECT子句以從查詢中獲取值,但不能同時具有兩者。 使用特殊表DUAL作為源,將所需的值放入SELECT語句中。

$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"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM