我有一个文本文件,我每个月都会解析并将数据插入到数据库中。文本文件看起来像这样。选择要插入数据库的条款,以便稍后查询记录
------------------------------------------------------------------------------------------------------------------------------------------------------------ BLK. NO 410 | 1 2| 3 4 5 6 7 | 8 9| 10 11 12 13 14 |15 16| 17 18 19 20 21 |22 23| 24 25 26 27 28 |29 30| 31 1 2 BLK 88.35 |SA SU| MO TU WE TH FR |SA SU| MO TU WE TH FR |SA SU| MO TU WE TH FR |SA SU| MO TU WE TH FR |SA SU| MO TU WE CR. 88.35 |194 /159 | |194 /159 | |194 /159 | |194 /159 | |239 OFF 14 : : VER DFW TRC DFW X : : VER DFW TRC DFW X : : VER DFW TRC DFW X : : VER DFW TRC DFW X : : CUU DFW C/O 06.00 TAFB 216.15 194=/1410/1055/0740, 159=/0900/1700/1400, 239=/1845/1945/0155 EM3 25.55 ERD 42.00 EM4 20.40 -----------------------------------------------------------------------------------------------------------------------------
该文本文件为100这些记录300(我们称其为“飞线”),我用它每个月要确定我的航班时刻表。我解析这个文件很好,但公司增加了一个新的皱纹。
这条“线路”可以是飞行员或乘务员。直到最近,每条线都可以是一名队长或副驾驶。但现在有些文件有船长线和副驾驶线。根据飞机的类型,乘务员档案可能有1或2个空乘位置或更多。
我需要在我的数据库中创建一个反映这些新信息的新列。一旦这些行被保存到数据库中,它们只会被搜索,而不会再次更新。我不想添加新的表格来追踪这些信息。我想添加一个新列到现有的表中。这是我的策略。
当我解析文本文件时,我会跟踪可用的位置。如果是Captain,我会将“CA”保存到数据库中。如果是副驾驶员,我会保存“FO”。如果是为了队长和副驾驶,我会省下“CAFO”。对于空乘人员,我将为1名乘务员保存一个数字“1”。对于每一个额外的poistion,我只会增加一个数字。如果更大的飞机需要更多乘务员停车位,这将允许以后扩展。因此,回顾一下,我将为每个数据库记录保存一个以下内容。
- “CAFO”
- “CA”
- “FO”
- “1”
- “2”
现在我需要访问数据库和检索这些记录我的网络程序。如果队长想要收回记录,他只会希望队长线路是“CAFO”或“CA”。第一军官的情况恰恰相反。 当我进行查询时,我发现我可以使用mySQL命令SUBSTRING来获取前2或后2个字符。
为队长线
选择
Line_number
,html_text
FROMlines
WHERE SUBSTRING(Crew_type
,1,2)= “CA”
这只是得到从记录中第一个开头两个字符它会匹配这两种情况。 对于第一官员,我开始在字符串的末尾,并抓住最后两个字符。
SELECT
Line_number
,html_text
FROMlines
WHERE SUBSTRING(Crew_type
,-2)= “FO”
对于乘务员我可以比较的数量。 如果乘务员只想要1个位置的线路。
选择
Line_number
,html_text
FROMlines
WHERE Crew_type = “1”
或者,如果他们希望所有可能的乘务员职位
选择
Line_number
,html_text
FROMlines
WHERE Crew_type> =“ 1“
我会将列类型设置为ENUM,并使用上面列出的值。
我的问题是否有更好的方法来解决这个问题?我只会插入一次,但会受到很大的影响。 SUBSTRING命令是否会减慢查询速度?
谢谢。解决方案简单 – jmm 2011-12-22 01:26:20