2010-08-13 52 views
1

我想知道什麼是完成以下使用MySQL的一個好辦法:構建SQL查詢(IES)使用可選參數/排名

比方說我有一個包含這些字段的表:

MyTable 
--------- 
Country [string] 
Region/Province/State [string] 
City [string] 

而且我在數據庫中的以下數據行

Entry 1: Canada, Ontario, Toronto 
Entry 2: Canada, Ontario, Hamilton 
Entry 3: Canada, Alberta, Calgary 

現在我希望能夠搜索該表根據用戶提供的信息,但是,如果沒有RESU找到了用戶提供的信息,我希望程序嘗試使其不太具體。例如,如果用戶提供:

Canada, Ontario, Kingston 

我想搜索查詢來搜索所有3個字段(這將產生0行),然後只對國家/地區(這將產生2行),然後只是針對國家(在前兩種情況下應該只產生一個額外的行)。這是可能的,如果是的話,它會非常有效嗎?這可以用1個查詢來完成,還是需要多個查詢,然後用一些交叉引用來消除相同的行(我想這樣做效率不高)?

非常感謝!

編輯 通過交叉引用/多個查詢我正在考慮使用UNION與幾個選擇。但我想知道是否有更好/更合乎邏輯的方式來做到這一點。

回答

1

我會去3個查詢。

規範化表,所以你可以在小表檢查countryregion/province/statecity,然後將它們鏈接到實際的項目在1 - > N(一對多的關係)。

SELECT * FROM cities 
LEFT JOIN actual_locations ON actual_locations.city = cities.id 
WHERE cities = 'NYC' 

希望它有幫助!

0

您可以創建一個查詢,選擇與三種可能性(匹配的國家,地區和城市,匹配的國家和地區,匹配的國家/地區)匹配的行。在該查詢中,您可以使用IF語句根據該值分配值和排名。

運行查詢以查看記錄是否與所有三個輸入匹配更爲簡單。如果它不返回任何行,請運行查詢以匹配兩個。如果那個返回沒有行,只匹配國家輸入。

+0

嗯,我將如何去分配排名值與IF語句?你介意舉個簡單的例子嗎? – user387302 2010-08-13 20:40:16