ユーザーがデバイスを選択し、アカウントに最大 10 個のデバイスを保存できるデバイス システムがあります。一度にアクティブにできるデバイスは 1 つだけです。
ユーザーが選択したデバイスに基づいて、以下の userdevice テーブルを挿入/更新するための正しい MySQL クエリを考え出そうとしています。まだアカウントにない場合は新しいデバイスを (アクティブとして) 追加し、アカウントの他のデバイスを非アクティブ (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)
これに関するもう 1 つの問題は、2 つのデバイスをアクティブにできることです。
助けていただければ幸いです。