MySQL selecting "previous" max(id) WHERE


MySQL selecting "previous" max(id) WHERE

我有一个表,用于在孩子入住夏令营区域时插入数据。如果孩子是<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