2011-08-10 3 views
0

Я пытаюсь создать инструкцию SQL, которая проверяет таблицу, чтобы увидеть, существует ли запись, если нет, она добавляет запись. Если она существует, она изменяет значение поля в TRUE.MySQL If (SELECT count (*) возвращает ошибку # 1064

If (SELECT COUNT(*) FROM 'my_preferences' JOIN users ON 'user_id' = 'mp_user_id') =1 
    UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id' 

Else   
    INSERT INTO `my_preferences` (`mp_user_id`, `mp_start_page`) VALUES ('user_id', 'TRUE') 

Я также посмотрел в попытке достичь этого с помощью INSERT ... ON дубликата ключа функции UPDATE, но я не могу получить, чтобы работать либо ..

Спасибо вам помочь

отредактирован ADD: Я сравнения двух отдельных таблиц (my_preferences & пользователей). Мне нужно, чтобы проверить таблицу my_preferences, чтобы увидеть, если users.user_id существует в mp_user_id поле, если да, то он обновляет mp_state_page в TRUE, если нет, то он добавляет запись делает mp_user_id = user_id и mp_start_page в ИСТИНА

+1

Я предполагаю, что использование одиночных кавычек вместо обратных тиков в вашем запросе - это просто опечатка, верно? –

+0

Этот вид не является допустимым запросом MySQL. Единственное место, где вы можете иметь такую ​​логику, - это хранимая процедура, функция или триггер. Запросы начинаются с SELECT, UPDATE, INSERT и т. Д. Вы можете сделать условную вставку с помощью 'INSERT INTO ... SELECT' или условного UPDATE с' INSERT ... ON DUPLICATE KEY UPDATE', но нет единого запроса для вашего логика. –

+0

ОК, сейчас я пытаюсь это: INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ((SELECT 'user_id' от пользователей), 'TRUE') дублированием KEY UPDATE mp_start_page = 'TRUE' возвращает эту ошибку: # 1242 - Подзапрос возвращает более 1 строки – EMUELLER

ответ

1
INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', 'TRUE') ON DUPLICATE KEY UPDATE mp_start_page = 'TRUE'; 

должно сработать. Возможно, mp_start_page является булевым полем, и в этом случае не цитируйте его. И, как упоминалось ниже, @galador, убедитесь, что mp_user_id настроен как какой-то ключ, как первичный, так и чужой. В противном случае ON DUPLICATE KEY на самом деле не имеет смысла.

+0

Это, похоже, ничего не делает с таблицей users, чтобы сравнивать users.user_id с полями my_preferences.mp_user_id. – EMUELLER

+0

Вам нужно сделать это первым 'JOIN'? Если 'mp_user_id' является внешним ключом, ссылающимся на' users.user_id', это не имеет значения. –

+0

Ваш код не вызывает ошибок, что хорошо, но добавляет только 1 запись с mp_user_id из 0. Я знаю, что должно быть добавлено еще много записей, а в таблице users нет user_id из 0. – EMUELLER

0

ошибка синтаксиса

UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id' <-- wrong syntax 
UPDATE TABLE_NAME SET `mp_start_page`= TRUE where 'user_id' = 'mp_user_id'; 

Однако MySQL не принимает

if {condition} 
then {update} 
else insert 

так

insert ignore ... <-- if the user_id is primary key 

другие серьезные проблемы

UPDATE `mp_start_page`= TRUE <--- this is 1 
VALUES ('user_id', 'TRUE') <--- this is string "TRUE" 

оба не делают то же самое

0

I've also looked into trying to achieve this with the INSERT ... ON DUPLICATE KEY UPDATE function, but i can't seem to get that to work either.

INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', TRUE) 
ON DUPLICATE KEY UPDATE mp_start_page=VALUES(mp_start_page) 

должен работать, если у вас есть уникальный набор ключей на mp_user_id.

Смежные вопросы