簡體   English   中英

MySQL選擇“上一個” 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條碼= XXXX,它將返回最后插入的行,但是,為了讓我檢索到該信息,必須對孩子進行掃描,正確插入新行並渲染max(kcID)在這種情況下沒有用。

我需要的是能夠選擇max(kcID)WHERE條碼= xxxx,然后選擇找到條碼= xxxx的上一行記錄。 這樣,我可以比較日期並知道孩子是要離開還是進入那個特定區域。

我現在想到的最簡單的解決方案是擁有2張桌子(其中1張用於進出1張),並讓營地輔導員選擇孩子是進出還是離開,但我想知道我是否只能使用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

您可以添加一個指示離開/返回的列,並將其添加到您的條件中。

例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM