我有一個汽車的分類列表網站,我正在開發使用PHP開發的過程。用戶使用主頁上的下拉選項框輸入他們正在尋找的汽車的詳細信息。當他們點擊提交時,他們被帶到結果頁面,這是我遇到問題的地方。有關SQL查詢速度和性能問題的幫助
它是建立在目前的方法是:
- 數據庫中查詢他們正在尋找汽車匹配任何結果。查詢返回汽車的ID和廣告的郵政編碼;
- 然後檢查每個廣告的用戶郵政編碼和廣告郵政編碼之間的距離。這本身需要數據庫查詢來查找每個廣告的單個郵政編碼的座標,並且對於有時可能超過350個結果的相當耗時;
- 然後使用if語句來確定距離是否小於或等於用戶在主頁上輸入的距離
- 如果廣告在允許的距離內,則它的ID被添加到數組;
- 然後計算該陣列中的廣告總數,並用於確定取決於廣告數量和要在頁面上顯示的廣告數量的變量;
- 然後使用
WHERE
語句和數組中的ID執行廣告表的第二個查詢。例如SELECT * FROM adverts WHERE ID=1 AND ID=4 AND ID=23
........查詢中使用的ID的總數取決於第5點中提到的變量。然後,當用戶單擊下一頁時,將從數組中剩下的位置重新運行查詢然後查詢被重新創建並執行。
我遇到的問題是,它需要很長時間才能完成,我正在尋找更多的資源和時間完成它的有意識的方式。
它最初被設計爲用WHERE子句爲每個用戶對汽車的特定要求執行查詢,然後在輸出到頁面之前使用if語句檢查距離。這造成了頁面編號的問題,因爲無法確定與查詢中返回的廣告的距離要求相匹配的廣告數量 - 因此,在完整廣告被收集之前滿足距離條件的情況下這樣做計算要顯示的確切數量的廣告。
對不起,它有點長 - 希望它是有道理的。我沒有包含任何代碼,因爲它會讓它變得更長,而且它的邏輯問題與實際代碼相反。
感謝您提出的任何建議。
有人要求表佈局和SQL。開始.....
廣告表
ID,品牌,型號,顏色,里程,發動機,年份,郵編
郵編表
ID,郵編,GridN,GridE,經度,緯度
用於首次查詢以獲得ID和郵政編碼的SQL
SELECT ID, Postcode FROM adverts WHERE Make = '$subMake' AND Model = '$subModel'
等
SQL第二查詢來獲得使用符合距離要求,該ID的該廣告的詳細信息:
SELECT Make, Model, Year, Engine, Colour FROM adverts WHERE ID IN(1,2,6,90,112,898)
(很抱歉,如果它不是語法正確的,它的工作,即SQL只是查詢字符串的許多行的粗略輪廓)。
'SELECT * FROM adverts WHERE ID = 1 AND ID = 4 AND ID = 23' would always always returns 0 rows?你的意思是'SELECT * FROM adverts WHERE ID IN(1,4,23)'instead? – GordonM
某些答案最少需要的是表結構和您正在使用的SQL ... – Yahia
是不是可以在您的SQL語句中執行距離計算,然後在返回之前進行篩選?這會快很多...... – Paddy