提问者:小点点

利用MySQL5.7中的存储过程实现数据的获取和更新


我有下面的桌子。。

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);

我希望从每个合作伙伴获取一张活动优惠券,并将其is_active col更新为0。 我使用的是MySQL5.7

我也希望获取那些is_active设置为0的记录。

我对MySQL5.7中使用事务/@变量/存储过程没有足够的了解


共1个答案

匿名用户

请尝试以下操作:

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