首页 > 解决方案 > 通过 MySQL 排序

问题描述

好的,这是我的数据库的基本数据结构......至少是我需要担心和使用的部分......

id       
address    
city          
state        
zipcode      (5 digit zip, looked up via usps by address)
realtor_id   (unique id for the realtor)
type_of_work     

当一个订单进入网站并想要一个标志时,他们会订购一个安装,大多数时候,地址就像“1550 Libby Street”一样,很多时候,他们没有输入最后一部分,“大道、街道、道路、法院等”,因此它们的输入方式并不总是相同。

当一个订单被放到网站上并且想要一个标志被撤下时,他们会下令移除,他们通常不会以相同的方式输入地址,这一次,他们可能会将地址输入为“1550 Libby St”。

现在,每一个订单进来,都是一个单独的插入到数据库中。

我想弄清楚该怎么做,当一个安装订单进来时,插入到数据库中,如果删除相同的地址,更新原始插入。

我正在尝试对其进行设置,以便我可以搜索数据库并找到已安装但尚未删除的地址,以便我可以在地图上显示它们。如果我可以保持数据库的原样,并且能够找到已安装但尚未删除的地址,那么这也可以。那有意义吗?

我试图找到已经发布的答案,但不知道如何表达问题或提出问题。对不起,如果它已经发布了。

标签: phpmysql

解决方案


您似乎在这里有几个单独的问题:

地址名称不一致

如果不说服您的客户每次都正确输入地址,这将很难解决。给他们单独的字段(地址行 1/2、城市、州、邮编)会有所帮助,因为它会提示他们输入整个地址。

或者,您可能希望让他们查看他们已安装的所有作业,然后选择需要删除的作业。如果他们从不输入两次地址,那么他们就不会弄错了!

安装后拆除

当客户决定移除标志时,您不应该覆盖特定地址的客户的记录。如果他们取消删除怎么办?如果他们想要在那里安装另一个标志,而您现在不知道您之前已经在该站点上工作过怎么办?

相反,您应该为每个事件在数据库中插入一个新行。

查找尚未删除的安装

有点不清楚是什么id- 这是唯一标识每一行,还是每个工作都有自己的id

我会继续假设每个工作都有自己的id.

由于 MySQL 不能做EXCEPT,你需要做一个WHERE NOT IN查询来代替:

SELECT signs.id, signs.address FROM signs WHERE signs.type_of_work = 'INSTALLATION' AND signs.id NOT IN ( SELECT signs2.id FROM signs2 WHERE signs2.type_of_work = 'REMOVAL' )

(请原谅我的风格;我更习惯 Postgres ......)

这应该选择每个具有安装工作的工作帽的 ID 和地址,除非该工作id与拆除工作相关。


推荐阅读