我有一个设备系统,用户可以在其中选择一个设备并在他们的帐户中存储多达 10 个设备。任何时候都只能有一台设备处于活动状态。
我正在尝试提出正确的 MySQL 查询,以根据用户选择的设备插入/更新以下 userdevice 表;添加任何新设备(如果它尚未在他们的帐户中),并使其帐户上的任何其他设备处于非活动状态(0)。
$userId、$newDeviceId 和 $oldActiveDeviceId 可用于构造查询。
CREATE TABLE IF NOT EXISTS `userdevice` (
`userid` int(11) NOT NULL,
`deviceid` int(11) NOT NULL,
`dateadded` datetime NOT NULL,
`datelastactive` datetime NOT NULL,
`active` tinyint(4) NOT NULL,
PRIMARY KEY (`userid`,`deviceid`),
KEY `active` (`active`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
一些样本数据:
INSERT INTO `userdevice` (`userid`, `deviceid`, `dateadded`, `datelastactive`, `active`) VALUES
(1, 1294, '2013-01-17 02:46:09', '2013-01-17 02:48:00', 1),
(1, 1307, '2013-01-17 02:45:24', '2013-01-17 02:45:00', 0),
(1, 1760, '2013-01-17 02:40:45', '2013-01-17 02:42:00', 0);
我想出了以下查询,但当然它会在更新 oldActiveDeviceId 时重置“datelastactive”字段:
INSERT INTO userdevice
(userid, deviceid, dateadded, datelastactive, active
VALUES
($userId,$newestDeviceId,NOW(),NOW(),1),
($userId,$oldActiveDeviceId,'','',0)
ON DUPLICATE KEY
UPDATE datelastactive = VALUES(datelastactive), active = VALUES(active)
另一个问题是它允许两个设备处于活动状态。
我会很感激任何帮助。