2011-04-30 74 views
1

有沒有人可以就解決我遇到的問題提供建議。我使用MSSQL運行PHP 5.3。只是爲了解釋發生了什麼以及我需要做什麼......如何使用連接字段查詢MSSQL數據庫

用戶從主頁上的表中選擇特定運行(行)。在表中的列有:

  • 日期
  • 除法
  • 開始英里/碼(格式爲565.1211即英里565和碼1211)[該列是由兩個單獨的列的級聯的「英里」,並從我的數據庫 「院子」]
  • 結束英里/碼
  • 開始LAT
  • 開始長
  • 結束LAT
  • 端長
  • 報告可用(是或否)

用戶可以通過點擊一個細胞在報告列中選擇一個行,其中報告=是。這些數據已發佈到下一頁。下一頁允許用戶更改開始和結束英里/碼數據,以便他們可以看到該運行的特定部分。

例如,用戶已經在主頁上選擇查看從開始英里/碼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之間的英里),但是我怎樣在同一時間通過碼和英里進行搜索?

不幸的是,我不能改變數據庫結構,因爲這是我必須使用的......如果任何人都能想到更好的方式來做我正在做的事情......我都是耳朵!

我知道這是一個很長的問題,所以任何不清楚的,請讓我知道!

乾杯,

尼爾

+0

在SELECT子句你施放和串聯英里和院子。所以他們是整數或什麼?然後在餐桌結構處,它們一起顯示爲英里/碼。發佈創建腳本。 – 2011-04-30 22:46:39

回答

0

你不應該投那些英里/碼號碼VARCHAR處理。你失去了將它們作爲數字進行比較的能力,這就是他們開始時的情況。

將用戶的英里/碼值轉換爲數字,然後與數據庫中的數字進行比較。

你試圖強迫蘋果和葡萄做桔子,並將它們與梨子和李子進行比較......只需將所有東西都變成菠蘿就可以了。

此外,通過執行cast + concatenation,您將失去任何可能將索引放在這些字段上的機會。如果您的表增長「很大」,您將通過爲每個查詢強制執行全表掃描來殺死性能。

+0

謝謝你的回覆Marc B ...你說得對!我現在改變了結構,但仍然很難查詢數據庫。我將結束這個問題並詢問另一個問題......乾杯 – happyneil 2011-05-03 09:56:31

0

正如Marc B所說,我試圖強迫蘋果和葡萄做桔子,並將它們與梨子和李子進行比較......可以說所有東西都是菠蘿。我現在改變了我的腳本的結構。

乾杯,

尼爾