我们在停车场的出入口有两个车牌阅读器摄像头,当检测发生时会生成一个CSV文件,然后自动加载到数据库,以及入口上的一个屏障,由摄像机的“白名单”自动操作,然后从数据库中生成并控制,并导出到一个文本文件中。
最初,我认为这将是一个简单的3表数据库,如下所示,但我很快意识到情况并非如此:
我的初步设计:
tbl_in : ID (autonum/PK), Plate, Date_in, Time_in
tbl_out: ID (Autonum/PK), Plate, Date_out, Time_out
tblwhitelist: Plate(PK), Country Code, Description目前,我唯一能想到的关系是:
白名单板块-板块_ in & plate_out,在这里,可以在输入和输出表中多次看到白名单中的一个板块
这使得我的大脑变得更加复杂(而这正是我大脑正在融化的地方!)已指定的查询(括号显示列和基本逻辑正在考虑结果):
我真正需要帮助的是关于如何整理查询代码以使这些代码正常工作的一些想法。这是我在这个项目中最后的主要障碍之一。不幸的是,这是珠穆朗玛峰那么大的障碍。如果您能提供任何帮助,我们将不胜感激!
发布于 2013-07-31 09:47:59
我同意草莓的帖子,in和out不需要两张桌子。你可以有一个这样的:
tblVehicleEvent : ID (autonum/PK), Plate, EventDate, EventTime, EventType其中EventType的值为IN或OUT。
或者可以合并TimeIn和TimeOut以及DateIn和DateOut,比如:
tblVehicleEvent : ID (autonum/PK), Plate, DateIn, DateOut, TimeIn, TimeOut根据您的需求,我认为后面的查询会更容易。
这些查询如下:
发布于 2013-07-31 09:58:43
就像草莓建议的那样,用一张桌子记录一辆车在公园里的全部停留时间。
tbl_stay
ID (autonum/PK), Plate, Date_in, Time_in, Date_out, Time_out如果使用两个不同的表,则必须执行复杂的查询来关联数据。什么告诉您tbl_in中的一行与tbl_out中的另一行相关?你必须比较车牌号码并找到最接近Date_out / Time_out的Date_in /Time_in.
因此,只需使用单个表,但不要使用Edper的第一个建议,您最终会遇到同样的问题,这一次根据事件类型过滤表,并尝试将一行与另一行关联起来。
我认为您的第一个查询应该是这样的:
SELECT *
FROM tbl_whitelisted
INNER JOIN tbl_stay
ON tbl_whitelisted.Plate = tbl_stay.Plate
WHERE tbl_stay.Date_in <= curdate()
AND (tbl_stay.Date_out IS NULL OR tbl_stay.Date_out = curdate())第二种情况是:
SELECT *
FROM tbl_stay
WHERE tbl_stay.Date_in <= curdate()
AND (tbl_stay.Date_out IS NULL OR tbl_stay.Date_out = curdate())
AND tbl_stay.Plate NOT IN (SELECT Plate FROM tbl_whitelist)或者这个(今天的“看到”意味着什么?我想这意味着这辆车的车牌今天至少被扫描过一次,所以之前的版本不会被扫描,因为它还会返回今天还在现场的车辆,但是昨天才收到的。)
SELECT *
FROM tbl_stay
WHERE (tbl_stay.Date_in = curdate() OR tbl_stay.Date_out = curdate())
AND tbl_stay.Plate NOT IN (SELECT Plate FROM tbl_whitelist)https://stackoverflow.com/questions/17966679
复制相似问题