9

我想执行这个 MySQL 查询:

INSERT INTO `cron-stats` (`user`) VALUES (".(int)$d['by-user'].")

每当此类用户尚不存在时,例如:

SELECT 1
FROM `cron-stats`
WHERE `user` = ".(int)$d['by-user']."

如何在一个查询中执行此操作?

4

3 回答 3

22

您可以使用ON DUPLICATE KEY UPDATE

INSERT INTO `cron-stats` (`user`) VALUES ('yourValue')
ON DUPLICATE KEY UPDATE user = user;

但为了INSERT很好地执行该语句,您需要UNIQUE在 column 上设置一个索引user

如果该列还没有index,执行下面的语句,

 ALTER TABLE `cron-stats` ADD CONSTRAINT tb_un UNIQUE (`user`)
于 2013-01-26T07:47:55.080 回答
6

有点hacky,但如果你使用SELECT派生表而不是VALUES你可以这样做:

INSERT INTO `cron-stats`(`user`)
SELECT u
FROM (SELECT @dByUser AS u) x
WHERE NOT EXISTS(SELECT 1 FROM `cron-stats` WHERE `user` = @dByUser)

SQL Fiddle 演示

于 2013-01-26T07:52:39.830 回答
-3

您可以尝试使用 if else 条件

$chk = mysql_query("select 'the username' FROM `cron-stats`");
$rs = mysql_fetch_array($chk);
if($rs == "")
{
    $ins = mysql_query("INSERT INTO `cron-stats` (`user`) VALUES ('.(int)$d['by-user'].')");
} 
else{
    echo "Duplicate entry";
}
于 2013-01-26T07:57:40.230 回答