Я пытаюсь отсортировать операторы SQL в одном запросе для последовательности проверки подлинности.
пользователь
╔════╦══════════════╦══════════╗
║ id ║ emailAddress ║ password ║
╠════╬══════════════╬══════════╣
║ 1 ║ test1 ║ pass1 ║
║ 2 ║ test2 ║ pass2 ║
║ 3 ║ test3 ║ pass3 ║
╚════╩══════════════╩══════════╝
токен_пользователя
╔═══════╦═════════╗
║ token ║ user_id ║
╠═══════╬═════════╣
║ t1 ║ 1 ║
║ t2 ║ 2 ║
║ t3 ║ 3 ║
╚═══════╩═════════╝
- Проверьте, существует ли запись, а также адрес электронной почты и пароль.
- Если совпадение найдено, вставьте токен с user_id в таблицу user_token.
- отправить обратно запись пользователя в наборе результатов
Мои попытки (частичные) обратите внимание, что я могу объединить несколько операторов sql, разделенных ;
Условная вставка
INSERT INTO user_token(token, user_id) SELECT ?, ? FROM DUAL WHERE EXISTS (SELECT * FROM user WHERE emailAddress = ? AND password = ?); ["t1", 1, "test1", "pass1"];
Установка какой-то переменной, попытка совмещена с другими попытками.
SELECT @id:=id, emailAddress, password FROM user WHERE emailAddress = "test1" AND password = "pass1";
Я думаю, что я близок, но у меня проблемы с доступом к @id из-за пределов подзапроса.
serviceRequest.sql = "INSERT INTO user_token(token, user_id)\ SELECT ?, @id FROM DUAL WHERE EXISTS ( SELECT @id:=id, emailAddress, password FROM user WHERE emailAddress = ? AND password = ? ); SELECT @id, ? FROM DUAL"; serviceRequest.values = ["t1", "test1", "pass1", "t1"];
Цель:
Чтобы объединить несколько операторов SQL, использующих логику, в одной транзакции/выполнении для достижения процесса аутентификации с помощью предложения IF
и пользовательских переменных в SQL и т. д.
insert
не возвращает запись в результирующем наборе. - person Gordon Linoff   schedule 20.02.2016@id=id
; посмотри мою попытку №2 - person user2727195   schedule 20.02.2016