2015-02-23 53 views
0

我有表:如何尋找更高的價值

City: 
id | name 
1 | New York 
2 | Amsterdam 
3 | Paris 
4 | London 


Trip: 
id | name 
1 | aaaa // New York --> Paris --> London 
2 | bbbb // London --> Paris --> Amsterdam 
3 | cccc // London --> New York --> Amsterdam --> Paris 
4 | dddd // Paris --> London 
5 | eeee // Amsterdam --> London 

TripDetails: 
id | tripId | cityId| order 
1 | 1  | 1 | 1 
2 | 1  | 3 | 2 
3 | 1  | 4 | 3 
4 | 2  | 4 | 1 
5 | 2  | 3 | 2 
6 | 2  | 2 | 3 
7 | 3  | 4 | 1 
8 | 3  | 1 | 2 
9 | 3  | 2 | 3 
10 | 3  | 3 | 4 
11 | 4  | 3 | 1 
12 | 4  | 4 | 2 
13 | 5  | 2 | 1 
14 | 5  | 4 | 2 

現在我想找到使用人次通過城市的城市。例如,如果我去阿姆斯特丹,那麼我想要收到巴黎(旅程ID = 3)和倫敦(旅程ID = 5)。不是紐約,因爲在3號旅行中紐約在阿姆斯特丹之前。

其他例如:

,如果我得到紐約的話,我應該接受所有城市 - 巴黎(跳閘1),倫敦(跳閘1)和阿姆斯特丹(跳閘3)。

如果我得到巴黎,那麼我應該只收到倫敦和阿姆斯特丹。

所以,我對於巴黎(ID:3):

SELECT * FROM "City" 
LEFT JOIN "TripDetails" ON City.id = TripDetails.cityId 
WHERE TripDetails.cityId = 3 
AND ???? 

我該怎麼辦呢?

我可以根據需要更改數據庫的整個結構。我使用PHP和MySQL。

回答

1

嘗試類似這樣的事情。這個例子是紐約(市ID = 1):

SQL Fiddle

查詢1

SELECT distinct city.name 
FROM tripDetails td1 
INNER JOIN tripDetails td2 ON td1.tripId = td2.tripId AND 
           td2.order > td1.order 
INNER JOIN city ON td2.cityId = city.id 
INNER JOIN trip ON td2.tripId = trip.id 
WHERE td1.cityID = 1 

Results

|  NAME | 
|-----------| 
|  Paris | 
| London | 
| Amsterdam | 
+0

完美,非常感謝:) – regu 2015-02-23 22:37:26