MySQL选择"之前" max(id)WHERE

时间:2014-06-26 06:12:43

标签: php mysql

我有一张桌子,当孩子入住夏令营地区时会插入数据。如果孩子是&lt; 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向父母发送短信,以便他们知道他们的孩子在特定区域之外。 / p>

我知道我可以检索max(kcID)WHERE条形码= XXXX并返回最后插入的行,但是,为了让我检索所述信息,必须扫描孩子,正确插入新行并渲染最大值(kcID)在这种情况下没用。

我需要的是能够选择max(kcID)WHERE barcode = xxxx,然后选择找到barcode = xxxx的上一行记录。这样我就可以比较日期并知道孩子是否正在离开或进入该特定区域。

我现在能想到的最简单的解决方案是拥有2个桌子(1个用于输入1)并让营地辅导员选择孩子是进入还是离开但是我想知道我是否只能使用1个桌子

2 个答案:

答案 0 :(得分:1)

添加一个状态为左的列并返回

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

答案 1 :(得分:0)

您可以添加一个表示请假/返回的列,并将其添加到您的条件中。

e.g。

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