如何搜索更高的值

时间:2015-02-23 21:58:17

标签: php mysql sql

我有桌子:

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 个答案:

答案 0 :(得分:1)

尝试这样的事情。此示例适用于纽约(city 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 |