I want to execute this MySQL query:
INSERT INTO `cron-stats` (`user`) VALUES (".(int)$d['by-user'].")
Whenever such user doesn't exist yet, as in:
SELECT 1
FROM `cron-stats`
WHERE `user` = ".(int)$d['by-user']."
How can I execute this in one query?
you can use ON DUPLICATE KEY UPDATE
INSERT INTO `cron-stats` (`user`) VALUES ('yourValue')
ON DUPLICATE KEY UPDATE user = user;
but in order to perform the INSERT
statement well, you need to set a UNIQUE
index on column user
.
if the column has no index
yet, execute the statement below,
ALTER TABLE `cron-stats` ADD CONSTRAINT tb_un UNIQUE (`user`)
A little bit hacky, but if you use a SELECT
derived table instead of VALUES
you can do:
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 demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With