Задать вопрос
@andry33822

Как правильно будет сделать JOIN?

как будет правильно сделать join операцию?
в таблицe users берём username
а в таблице user_apikey скрещиваем с username (что то по типу, ключ создан на username *** )
Как будет правильно скрестить это дело?
Не понимаю как корректно это сделать
как я понимаю должно что то ввиде этого:
SELECT users.username, users_apikey.username FROM users JOIN users_apikey
но теперь я опять подхожу к безысходности, и не понимаю как это скрестить с добавлением в бд ->
сейчас я имею такой код
$query = $dbh->prepare("INSERT INTO users_apikey(namekey,uapikey) VALUES (:namekey,:ukey)");
  $query->bindParam("namekey", $namekey, PDO::PARAM_STR);     
  $query->bindParam("ukey", $ukey, PDO::PARAM_STR);

как мне корректно это провернуть?
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
andry33822, огорчу. Описанная мной в комментарии к вопросу процедура требует ВСТАВКИ записи в таблицу users и ОБНОВЛЕНИЯ существующей записи в таблице users_apikey. То есть INSERT в одну таблицу + UPDATE другой таблицы.

В один запрос это никаким образом не укладывается. Но задачу можно решить. Триггером.

CREATE TRIGGER tr_assign_apikey_to_user
AFTER INSERT 
ON users
FOR EACH ROW
UPDATE users_apikey SET username = NEW.username WHERE username = '' LIMIT 1;


DEMO fiddle

Правда, триггер простейший, и ничего не проверяет. По-хорошему надо как минимум проверить, что свободный apikey - есть, и если нет - то сгенерировать ошибку добавления юзера. Ну и не исключаю дополнительных условий - например, мне лично запись в apikey, не имеющая вменяемого значения в поле namekey, как-то не нравится.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы