如何使用连接字段查询MSSQL数据库

时间:2011-04-30 22:27:58

标签: php sql-server

是否有人可以就解决我遇到的这个问题提出建议。我用MSSQL运行PHP 5.3。只是为了解释发生了什么以及我需要做什么......

用户从主页上的表中选择特定的运行(行)。表中的列是:

  • 日期
  • 分部
  • 开始英里/码(格式为565.1211,即英里565和码头1211)[此栏目由我的数据库中两个单独的列“英里”和“码”的串联组成]
  • end mile / yard
  • start lat
  • 开始很久
  • end 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)的组合时,如何从我的数据库中查询此信息?我假设我将不得不将数据分成英里和码头(我将如何做到这一点)...还如何检索信息?按英里搜索很简单(例如,在BETWEEN 570和580之间的英里),但我如何同时按码和英里搜索?

不幸的是,我无法改变数据库结构,因为这是我必须要处理的事情......如果有人能想到一个更好的方式来做我正在做的事情......我全都耳朵!< / p>

我知道这是一个很长的问题,所以任何不清楚的地方,请告诉我!

干杯,

尼尔

2 个答案:

答案 0 :(得分:0)

您不应该将这些里程/码数转换为varchars。你失去了将它们作为数字进行比较的能力,这就是它们的开始。

将用户的英里/码数值转换为数字,然后与数据库中的数字进行比较。

你试图强迫苹果和葡萄成为橘子,并将它们与梨和李子进行比较......可以说,所有东西都是菠萝,可以这么说。

此外,通过执行强制转换+连接,您将失去任何可能在这些字段上放置索引的机会。如果您的表变得“大”,您将通过强制每个查询的全表扫描来消除性能。

答案 1 :(得分:0)

正如Marc B所说,我试图强迫苹果和葡萄成为橘子,并将它们与梨和李子进行比较......可以说,所有东西都是菠萝。我现在改变了我的脚本结构。

干杯,

尼尔