繁体   English   中英

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

[英]How to query a MSSQL database using a concatenated field

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

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

  • 日期
  • 分配
  • 开始英里/码(格式为 565.1211,即 565 英里和 1211 码)[此列由我的数据库中两个单独的列“英里”和“码”的串联组成]
  • 终点英里/码
  • 开始纬度
  • 开始长
  • 结束纬度
  • 结束很长
  • 全部的
  • 报告可用(是或否)

用户可以通过单击报告列中报告=是的单元格来 select 一行。 该数据发布到下一页。 下一页允许用户更改开始和结束英里/码数据,以便他们可以看到该运行的特定部分。

例如,用户已在主页上选择查看从开始英里/码 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)的组合时,我将如何从我的数据库中查询此信息? 我假设我将不得不再次将数据分成英里和码(我该怎么做)......还有如何检索信息? 只按英里搜索会很简单(例如 WHERE mile BETWEEN 570 AND 580),但我如何同时按码和英里搜索?

不幸的是,我将无法更改数据库结构,因为这是我必须使用的……如果有人能想到更好的方法来做我正在做的事情……我全神贯注!

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

干杯,

尼尔

您不应该将这些英里/码数转换为 varchars。 您失去了将它们作为数字进行比较的能力,而这正是它们最初的用途。

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

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

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

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

干杯,

尼尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM