我有两张桌子
事件
和
固定场所
CREATE TABLE `events` (
`idEvents` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NumberOfPlaces` int(10) unsigned DEFAULT '0',
`FpOddsPrice` double DEFAULT '0',
PRIMARY KEY (`idEvents`),
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
////////////////////////////////////////////////////////////////
CREATE TABLE ` fixedplace ` (
`idFixedPlacePrice` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NumberOfRunners` int(10) unsigned DEFAULT NULL,
`Places` int(10) unsigned DEFAULT NULL,
`FpOddsPrice` double DEFAULT NULL,
PRIMARY KEY (`idFixedPlacePrice`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;
Insert Into fixedplace (NumberOfRunners, Places, FpOddsPrice)
Values
(0, 0, 0),
(10, 3, 0.16),
(13, 4, 0.21);
//////////////////////////////////////////////////////////////
要访问固定位置数据,我使用以下语句
SELECT
Places,
FpOddsPrice
FROM FixedPlace as
WHERE NumberOfRunners <= :FNumberOfRunners
ORDER BY NumberOfRunners desc
LIMIT 1
即,如果:fnumberofruners=11,则place为3,fpoddsprice=0.16
//////////////////////////////////////////////////////////////
我在写更新声明时遇到问题
将基于fixedplace表中的值更新事件表
这不起作用
UPDATE Events as E, FixedPlace as F
Set E.Places = F.Places,
E.FpOddsPrice = F.FpOddsPrice
WHERE E.idEvents = :FidEvents
And F.NumberOfRunners <= :FNumberOfRunners
ORDER BY F.NumberOfRunners desc
LIMIT 1
它给出了以下错误
“update an order by”的用法不正确
我该怎么做才能让它工作?
编辑
这很管用,但有没有更好的方法
UPDATE Events as E
Set E.Places = (Select Places FROM FixedPlace WHERE NumberOfRunners <= :FNumberOfRunners ORDER BY NumberOfRunners desc LIMIT 1),
E.FpOddsPrice = (Select FpOddsPrice FROM FixedPlace WHERE NumberOfRunners <= :FNumberOfRunners ORDER BY NumberOfRunners desc LIMIT 1)
WHERE E.idEvents = :FidEvents