Составить запрос MySql

ArbNet
На сайте с 27.10.2019
Offline
125
476

Задача: Если есть значение, то вернуть id. Если нет значения, то вставить и вернуть id.

Кто силён в MySql, подскажите как лучше сделать?

Обсуждение разработки на моём фреймворке https://discord.gg/23N4s9x2kp
W1
На сайте с 22.01.2021
Offline
286
#1
ArbNet :
как лучше сделать?

Лучше сделать двумя запросами: получить id, и если его нет, то вставить значение.

Мой форум - https://webinfo.guru –Там я всегда на связи
edogs software
На сайте с 15.12.2005
Offline
775
#2
ArbNet :

Задача: Если есть значение, то вернуть id. Если нет значения, то вставить и вернуть id.

Кто силён в MySql, подскажите как лучше сделать?

replace into table...
Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#3
webinfo1 #:

Лучше сделать двумя запросами: получить id, и если его нет, то вставить значение.

Нельзя, нарушается целостность, нет гарантии, что этого ID не будет для следующего запроса.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
W1
На сайте с 22.01.2021
Offline
286
#4
LEOnidUKG #:

Нельзя, нарушается целостность, нет гарантии, что этого ID не будет для следующего запроса.

Ну во-первых, мы не знаем конкретики - скорее всего, это действия единственного пользователя. Во-вторых, существует транзакция.

ArbNet
На сайте с 27.10.2019
Offline
125
#5
Сделал через функцию
DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `Test`(`tbl` TINYTEXT, `fld` TINYTEXT, `val` TEXT) RETURNS int
BEGIN
    SELECT id INTO @id FROM tbl WHERE fld=val;
    IF @id THEN RETURN @id;
    ELSE BEGIN
        INSERT INTO tbl SET fld=val;
        RETURN LAST_INSERT_ID();
    END; 
    END IF;
END$$
DELIMITER ;

Но, нужно передавать в параметрах имя таблицы, поля и само значение. Функция стала возвращать пустой результат. Перепробовал всё...

Возможно ли использование условия без функции, сразу в запросе? Показывает: Недопустимый оператор возле IF

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий