Использование хранимой процедуры в MYSQL 5.7 для выборки и обновления - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таблица ниже ..

CREATE TABLE Coupons (
    cid INT(11) PRIMARY KEY,
    coupon_name  VARCHAR(255),
    partner     VARCHAR(255),
    is_active   INT(1)
);
INSERT INTO `table_name`(cid,coupon_name,partner_name,is_active) VALUES (0,'SWIGGYONE','SWIGGY',1);
INSERT INTO `table_name`(cid,coupon_name,partner_name,is_active) VALUES (1,'ZOMATOONE','ZOMATO',1);
INSERT INTO `table_name`(cid,coupon_name,partner_name,is_active) VALUES (2,'SWIGGYONE','SWIGGY',1);
INSERT INTO `table_name`(cid,coupon_name,partner_name,is_active) VALUES (3,'ZOMATOTWO','ZOMATO',1);

Я sh, чтобы получить один АКТИВНЫЙ купон от каждого партнера и обновить его is_active col до 0. Я использую MYSQL 5,7

Я использую sh, чтобы получить и те записи, для которых is_active установлено значение 0.

У меня недостаточно знаний о транзакциях / @variables / Хранимых процедурах, используемых в MYSQL 5.7

1 Ответ

0 голосов
/ 09 июля 2020

Попробуйте следующее:

CREATE PROCEDURE `pr_coupons`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
    /** Inactivate the very first coupon **/
    
    UPDATE Coupons
    SET is_active = 0
    WHERE Coupons.cid IN
    (
        SELECT cid from
        (
            SELECT cid
            FROM Coupons
            WHERE Coupons.is_active = 1
            GROUP BY Coupons.partner
        ) AS inner_table
    );
    
    /** Select active coupons **/
    
    SELECT *
    FROM Coupons
    WHERE is_active = 1;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...