有没有人能给我解决这个问题的建议?我正在运行PHP 5.3与MSSQL。只是为了解释发生了什么以及我需要能够做什么…
用户从主页上的表中选择特定的运行(行)。表中的列是:
- <
- 部门/gh>
- 起始英里/码(格式为565.1211,即英里565和码1211)[这一列是由我的数据库中的两个独立列"英里"answers"码"串联而成]
- 结束英里/院子
- 开始lat
- 开始长
- 结束lat
- 结束长 总数
- 可用报告(是或否)
用户可以通过单击report=yes的报表列中的单元格来选择一行。这些数据被贴在下一页上。下一页允许用户更改开始和结束英里/码数据,以便他们可以看到该运行的特定部分。
例如,用户在主页上选择查看从起始英里/码565.1211到结束英里/码593.4321的数据。用户可以通过在两个文本框中输入来更改他们想要看到的部分。一个框是"开始英里/码",第二个框是"结束英里/码"。因此,用户可以在"起始英里/码"文本框中输入570.2345,在"结束英里/码"文本框中输入580.6543。我想要发生的是从用户输入的地方查询数据…
SELECT id, CAST(mile AS varchar(6)) + '.' + CAST(yard AS varchar(6)) AS Mile, gps_lat, gps_long, rotten, split, broken, quality
FROM table
WHERE mile/yard BETWEEN start mile ??? AND end mile ???
ORDER BY Mile
我的问题是,当用户输入英里/码(580.6543)的组合时,我该如何从数据库查询此信息?我假设我将不得不再次将数据拆分为英里和码(我该如何做到这一点)…如何检索信息?这将是简单的做只是搜索英里(例如哪里英里之间570和580),但我如何搜索码和英里在同一时间?
不幸的是,我将无法改变数据库结构,因为这是我必须与…如果有人能想出更好的方法来做我正在做的事情……我洗耳恭听!!
我知道这是一个很长的问题,所以任何不清楚的,请让我知道!
欢呼,尼尔
您不应该将这些英里/码数强制转换为varchars。你失去了将它们作为数字进行比较的能力,而这正是它们开始时的状态。
将用户的英里/码值转换为数字,然后与数据库中的数字进行比较。
你试图强迫苹果和葡萄是橙子,并将它们与梨和李子进行比较……可以说,只要把所有东西都做成菠萝就行了。
此外,通过进行强制转换+连接,您将失去在这些字段上添加索引的任何机会。如果你的表变"大"了,那么强制对每个查询进行全表扫描会降低性能。
正如Marc B所说,我试图强迫苹果和葡萄成为橙子,并将它们与梨和李子进行比较……可以这么说,把所有东西都做成菠萝。我现在已经改变了我的脚本的结构。
欢呼,尼尔