我有一个表,用于在孩子入住夏令营区域时插入数据。如果孩子是<12岁以下儿童进入儿童区(<12岁)必须扫描家长条形码。
表有以下列:
kcID
uID
id
age
room
barcode
date
amber
数据通常是这样呈现的。
kcID uID id age room barcode date amber
25 1 1 30 1000 0001 6/26/2014 1:27:40 AM 0
26 6 1 1 1000 0005 6/26/2014 1:27:40 AM 0
我遇到的问题是,我需要比较日期/时间,以了解孩子是否进入或离开营地区域,并通过php发送短信给父母,让他们知道他们的孩子在特定区域之外。
我知道我可以检索max(kcID) WHERE barcode = XXXX,这将返回最后插入的行,但是,为了让我检索所述信息,必须扫描孩子,正确插入新行并在这种情况下渲染max(kcID)无用。
我需要的是能够选择max(kcID) WHERE条形码= xxxx,然后选择条形码= xxxx的前一行记录。这样我就可以比较日期,知道孩子是离开还是进入那个特定的区域。
我现在能想到的最简单的解决方案是有2张桌子(1张用于进入,1张用于退出),让营地辅导员选择孩子是进入还是离开,但我想知道我是否可以只使用一张桌子。
添加一个状态为left并返回的列
ALTER TABLE `table` ADD `status` enum('left', 'returned') NOT NULL DEFAULT 'left';
现在您可以通过执行查询
来选择倒数第二行select `kcID`, `barcode` from `table` where `status` = 'left' ORDER BY `barcode` DESC LIMIT 1,1
您可以添加一列表示离开/返回,并将其添加到您的条件中。
。
ALTER TABLE `table`
ADD `status` enum('left', 'returned') NOT NULL DEFAULT 'left';
一个查询应该是
SELECT `kcID`, `barcode`
FROM `table`
WHERE `status` = 'left'
ORDER BY `timefield` DESC
LIMIT 1