首先我要说声抱歉,因为之前的系统/数据库设计将数据以字符串格式存储在像>>> A1 - A8 (表示第1行到第8行)或B4 - B12 (表示第4行到第12行)这样的组中,并存储在数据库中。
示例
========================
=*条件 =
========================
=*A1-A8**= Good =
=B4-B12= Bad =
========================
但是现在系统改变了!!(一年后)并且需要用1来识别它的每一个,这意味着现在用户输入A4,系统能够返回它的状态(好)或进入A20系统返回未找到
有没有办法(编码端或sql语句)在不改变数据库设计的情况下满足这一新需求?因为如果在数据库端改变,它也需要改变它存储数据的方式(还有更多的工作要做)
我希望你们能理解我的问题。顺便说一下,我使用的是PHP和mySQL。
发布于 2014-03-11 14:44:41
您将必须通过第一个字符提取行,例如'A‘,然后将'1’转换为'8‘为一个范围(A1,A2...,A8),然后执行in_array以查看它们是否存在于数组中。虽然看起来非常复杂和昂贵的解决方案
发布于 2014-03-11 14:53:28
这是非常糟糕的数据库设计,您应该考虑更改。现在,逻辑是这样的:
将用户输入拆分为字母和数字-比方说从表中拆分座位(以及Condition),
-
row_seat_letter1,row_seat_number1和row_seat_letter2,如果D18>不匹配D19user_seat_letter >,则从表中取出下一个座位ii)否则,如果座位匹配,则检查user_seat_number是否等于row_seat_number1和row_seat_number2之间
a)如果为true,则返回该行的Condition;b)否则返回'Not Found‘
iii) Else return 'Not Found'
https://stackoverflow.com/questions/22318232
复制相似问题