Триггер MYSQL для выбора и обновления той же таблицы выдает ошибку #1241 - Операнд должен содержать 1 столбец

Когда я пытаюсь выбрать и обновить ту же таблицу, MySQL дает ошибку

error
#1241 - Operand should contain 1 column(s)

Триггер

DELIMITER $$
CREATE TRIGGER visitor_validation
BEFORE INSERT ON ratingsvisitors
FOR EACH ROW
BEGIN
SET @ifexists = (SELECT * FROM ratingcounttracks WHERE userid=New.vistorid AND likedate=New.likevalidation AND countfor=New.likeordislike);
IF (@ifexists = NULL) THEN
INSERT INTO  ratingcounttracks(userid, likedate, clickcount,countfor) values (New.vistorid, New.likevalidation ,'1',New.likeordislike);
ELSE
UPDATE ratingcounttracks SET clickcount=clickcount+1 WHERE userid=New.vistorid AND likedate=New.likevalidation AND countfor=New.likeordislike;
END IF;
END$$

1 ответ

Решение

Проблема в том, что вы выбираете несколько столбцов (SELECT * FROM ...) в одну переменную (@ifexists).

Решение не в том, чтобы использовать переменную! Просто используйте нормальный SQL IF NOT EXISTS (...):

DELIMITER $$
CREATE TRIGGER visitor_validation
BEFORE INSERT ON ratingsvisitors
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM ratingcounttracks WHERE userid=New.vistorid AND likedate=New.likevalidation AND countfor=New.likeordislike) THEN
    INSERT INTO  ratingcounttracks(userid, likedate, clickcount,countfor) values (New.vistorid, New.likevalidation ,'1',New.likeordislike);
ELSE
    UPDATE ratingcounttracks SET clickcount=clickcount+1 WHERE userid=New.vistorid AND likedate=New.likevalidation AND countfor=New.likeordislike;
END IF;
END$$
Другие вопросы по тегам