if statement в sql

273
13 июля 2017, 00:15

Здравствуйте, есть две таблицы в СУБД MySQL:

  1. user

    +----+-------+----------+
    | id | login | password |
    +----+-------+----------+
    |  1 | o1    | 123      |
    +----+-------+----------+
    
  2. session

    +-------+--------+---------+---------------------+---------------------+
    | token | active | user_id | create_time         | update_time         |
    +-------+--------+---------+---------------------+---------------------+
    | first |      1 |       1 | 2017-07-06 12:31:00 | 2017-07-06 12:31:00 |
    +-------+--------+---------+---------------------+---------------------+
    

Нужно сделать следующее: если в user есть строка где логин o1, то добавляем запись в session.

Делал примерно так, но не вышло:

if((select count(*) from user where login = 'o1')>0, 
    insert into session values ('first', 1, now(), now()), 
    select NULL from user);
Answer 1

Если user.login уникально, то

INSERT INTO session (token,active,user_id,create_time,update_time)
SELECT 'first', 1, user.id, now(), now()
FROM user
WHERE user.login = 'o1'

Если неуникально - ну добавить LIMIT 1 (а лучше - дополнительные условия отбора, чтобы выбралась ОДНА запись).

Только непонятно, зачем делать ручные присвоения полям create_time и update_time, когда есть автоматизированное DEFAULT и ON UPDATE...

Answer 2

Функция IF может быть выполнена только из запроса/встроенной процедуры.

нужно сделать следующее: если в user есть строка где логин o1, то то добавляем запись в session... делал примерно так, но не вышло:

Вставки по условию можно добиться с помощью INSERT-SELECT-WHERE. Например так:

insert into session 
select 't2', 1, 1, now(), now()
from dual
where (select count(*) from user where login = 'o1') > 0;

Или так:

insert into session 
select 't3', 1, 1, now(), now()
from dual
where exists (select 1 from user where login = 'o1');

Количество столбцов в приведенном вами запросе и в таблице sessions не совпадает. Проверьте запрос еще раз, возможно потребуется выбор user_id.

READ ALSO
Как по условию прервать транзакцию?

Как по условию прервать транзакцию?

как на mysql сделать такую операцию:

252
Java: Запись данных в БД

Java: Запись данных в БД

Сделал метод, который записывает данные в БД

321
Можно ли удалить только выбранные поля из строки MySQL

Можно ли удалить только выбранные поля из строки MySQL

Можно ли как то удалить значение выбранного столбца из строки MySQLДопустим есть таблица users и в нем поля id, username, regdate, image

255
Call to a member function prepare() on a non-object

Call to a member function prepare() on a non-object

Почему мне показывает следующую ошибку, хотя запрос правильный?

252