MySQL触发器 - 插入前查询第3个表

时间:2014-02-11 11:43:12

标签: mysql database

首先,如果此帖子不完整或格式不正确,请道歉。车轮后面的新手。

我有3个表参与了这个特定的挑战(MySQL v5.6)。

'bet','bet_win'和'bet_win_cfg'

'bet'和'bet_win'是相同的表(所有属性都列在本文底部的'insert into'语句中),而下面是'bet_win_cfg'表的样本

INSERT INTO bet_win_cfg (eventVenue, priceRangeMin, priceRangeMax, sizeMin)
VALUES 
("Bairnsdale",2,3,1500),
("Bairnsdale",3.01,4,1400),
("Bairnsdale",4.01,5,1300),
("Bairnsdale",5.01,6,1200),
("Bairnsdale",6.01,7,1000),
("Bairnsdale",7.01,8,800),
("Bairnsdale",8.01,9,700),
("Bairnsdale",9.01,10,600),
("Bairnsdale",10.01,12,500),
("Bairnsdale",12.01,16,450),
("Bairnsdale",16.01,20,400),
("Bairnsdale",20.01,30,300),
("Bairnsdale",30.01,50,250),
("Bairnsdale",50.01,500,200),
("Randwick",30.01,50,250),
("Randwick",50.01,500,200);
etc

我在'bet'上设置了一个插入触发器。我需要比较赌注表中每条新记录的3个值('bet.eventVenue','bet.price'和'bet.size')与'bet_win_cfg'表中的相关字段(eventVenue,priceRangeMin,priceRangeMax) ,sizeMin)看看是否满足条件(基本上每个事件场所都有一个最小尺寸,需要满足每个'价格范围'。如果在相应的价格范围内实现了最小赌注,我想插入一个相同记录到bet_win表中。)

例如 - 在Bairnsdale的一个新的'赌注'记录,大小为1700,价格为2.50也会产生插入bet_win表,而下注大小为1400,价格为2.50则不会。

下面创建触发器时没有错误。只是没有记录进入bet_win表。

到目前为止,我有以下内容:

DROP TRIGGER IF EXISTS ins_LoadBet_win;
delimiter $$
CREATE DEFINER =`root`@`localhost`
TRIGGER ins_LoadBet_win BEFORE INSERT ON bet
FOR EACH ROW
BEGIN
DECLARE Size_ INT(11);

Select sizeMin INTO Size_ FROM bet_win_cfg
INNER JOIN bet ON bet_win_cfg.eventVenue = bet.eventVenue where bet.price       
BETWEEN bet_win_cfg.priceRangeMin AND bet_win_cfg.priceRangeMax
LIMIT 1;
IF(Size_ < new.Size) THEN
insert into bet_win
(
 id
,exchangeID
,dateTime
,eventVenue
,eventName
,marketName
,marketId
,cfgMarketId
,selectionId
,runnerName
,price
,Size
,TLsize
,RMC
,minPrice
,maxPrice
,A
,B
,availableToLay
,tradedVolume
,cfgAlgorithmId
,betId
,betType
,betStake
,result
,profit
,category
) 
values 
(
 New.id
,New.exchangeID
,New.dateTime
,New.eventVenue
,New.eventName
,New.marketName
,New.marketId
,New.cfgMarketId
,New.selectionId
,New.runnerName
,New.price
,New.Size
,New.TLsize
,New.RMC
,New.minPrice
,New.maxPrice
,New.A
,New.B
,New.availableToLay
,New.tradedVolume
,New.cfgAlgorithmId
,New.betId
,New.betType
,New.betStake
,New.result
,New.profit
,New.category
);
END IF;
END$$

1 个答案:

答案 0 :(得分:0)

我很确定问题是第一个问题:

Select bwc.sizeMin INTO Size_
FROM bet_win_cfg bwc INNER JOIN
     bet b
     ON bwc.eventVenue = b.eventVenue
where b.price BETWEEN bwc.priceRangeMin AND bwc.priceRangeMax
LIMIT 1;

我在任何地方都看不到new。我想这就是你想要的:

Select bwc.sizeMin INTO Size_
FROM bet_win_cfg bwc
where bwc.eventVenue = new.eventVenue and
      new.price BETWEEN bwc.priceRangeMin AND bwc.priceRangeMax
LIMIT 1;

你的原文只是从win cfg表中选取一行,而且可能有一个非常大的。