我想插入一行但不插入已存在的数据。是否可以通过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行
答案 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"));