2016-06-07 155 views
0

我正在開發一個項目,其中用戶表具有列國家,州和城市。另一個名爲projects的表格也包含列國家,州和城市。 現在我想從項目表中獲得最相關的結果,其中項目應該具有相同的城市,州和國家。意味着city.state和country所匹配的行應該在最上面。而只有與國家相匹配的國家才應該處於底部。根據用戶位置顯示結果

用戶

ID | username | country | state | city 

1 | user1 | country1| state1 |city1 
2 | user2 | country2| state2 |city2 
3 | user3 | country3| state3 |city3 

項目

title | country | state | city 

    p1 | country1| state1 |city1 
    p2 | country1| state1 |city2 
    p3 | country1| state2 |city2 

假設user1的登錄,我想根據用戶的位置來顯示最相關的結果給該用戶。 例如在第p1行項目taqble中,所有國家州和城市都與用戶所在國家和城市匹配。在p2中只有兩個國家和州匹配並且在p3中只有國家匹配。我想要按照p1,p2和p3的順序檢索行。

+2

郵政一些示例數據和預期的結果將是更多的幫助。 – Blank

+0

我已更新問題。 – Sama

回答

0

試試這個,你希望幫助;)

SQL Fiddle

的MySQL 5.6架構

CREATE TABLE users 
    (`ID` int, `username` varchar(5), `country` varchar(8), `state` varchar(6), `city` varchar(5)) 
; 

INSERT INTO users 
    (`ID`, `username`, `country`, `state`, `city`) 
VALUES 
    (1, 'user1', 'country1', 'state1', 'city1'), 
    (2, 'user2', 'country2', 'state2', 'city2'), 
    (3, 'user3', 'country3', 'state3', 'city3') 
; 


CREATE TABLE projects 
    (`title` varchar(2), `country` varchar(8), `state` varchar(6), `city` varchar(5)) 
; 

INSERT INTO projects 
    (`title`, `country`, `state`, `city`) 
VALUES 
    ('p1', 'country1', 'state1', 'city1'), 
    ('p2', 'country1', 'state1', 'city2'), 
    ('p3', 'country1', 'state2', 'city2') 
; 

查詢1

select t1.*, t2.*, (t1.country = t2.country) + (t1.state = t2.state) + (t1.city = t2.city) as cnt 
from users t1 
left join projects t2 
on t1.country = t2.country or t1.state = t2.state or t1.city = t2.city 
order by t1.id, cnt desc 

Results

| ID | username | country | state | city | title | country | state | city | cnt | 
|----|----------|----------|--------|-------|--------|----------|--------|--------|--------| 
| 1 | user1 | country1 | state1 | city1 |  p1 | country1 | state1 | city1 |  3 | 
| 1 | user1 | country1 | state1 | city1 |  p2 | country1 | state1 | city2 |  2 | 
| 1 | user1 | country1 | state1 | city1 |  p3 | country1 | state2 | city2 |  1 | 
| 2 | user2 | country2 | state2 | city2 |  p3 | country1 | state2 | city2 |  2 | 
| 2 | user2 | country2 | state2 | city2 |  p2 | country1 | state1 | city2 |  1 | 
| 3 | user3 | country3 | state3 | city3 | (null) | (null) | (null) | (null) | (null) | 
+0

謝謝@Reno這解決了我的問題。 – Sama