首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用什么机械师来订购一个数组?

我能用什么机械师来订购一个数组?
EN

Stack Overflow用户
提问于 2012-06-28 14:37:56
回答 1查看 153关注 0票数 5

我被一个很奇怪的问题困住了。我是说我不知道怎么威胁这个。

基本上,我有一个网页,其中列出了一个已定义的公交线路的所有站点(例如,route_id = 141)。有时候,一条路线,可以从A点开始,到B点,所以理论上从一个终点到另一个终点站。但是,有时候,同一条路线可以从A到B之间的某个地方开始,然后从A点或B点出发。

您可以在以下地址看到一个活动示例:http://stm.tranzit.ca/bus/stops/85/Hochelaga/

我的超级抽奖:

代码语言:javascript
复制
Regular trip
Start(A) ----------------------------------- End(B)

Sometime
                 Start --------------------- End(B)
Start(A) ---------------------- End

等等。它总是介于A点和B点之间,90%的时间是从A点到B点,而另外10%是在A点到B点之间,直到另一点之间(有时是从中间点到A点或B点)。

好的。在使用stop_sequence对结果进行排序之前。我知道停序的顺序,所以停1,停2,等等,还有多少次行程(一次从A到B,或者A到中间,等等)。

现在,我找到了一种方法来对我的结果进行排序并区分它们,所以现在我知道了我所有的旅行(A-B,B-A,A-中间,B-B,等等)。

假设我有A-B,B-A,A-中间和B-中间,我有4种可能的路线。然后我把链接到它的所有停止都拿来。

例如,这是一个从A到B的列表,用于定义路线。请注意stop_sequence 35的值。

代码语言:javascript
复制
1   #53014  Station Frontenac (Frontenac / Ontario)

... 2, 3. etc..

34  #53293  Honoré-Beaugrand / Roux  
35  #54257  Station Honoré-Beaugrand / Sherbrooke    
36  #53290  Saint-Donat / Sherbrooke     
37  #53265  Saint-Donat / De Forbin-Janson   
38  #54676  Saint-Donat / De Grosbois    
39  #54674  Saint-Donat / Roi-René   
40  #54672  Saint-Donat / les Reaux  
41  #54668  Saint-Donat / Chénier    
42  #54661  Joseph-Renaud / Yves-Prévost     
43  #54646  Joseph-Renaud / Châtillon    
44  #54629  Joseph-Renaud / Wilfrid-Pelletier    
45  #54605  Joseph-Renaud / Châteauneuf  
46  #54609  Châteauneuf / Vaujours   
47  #54610  Châteauneuf / Rabelais   
48  #54612  Châteauneuf / de la Loire    
49  #54621  Châteauneuf / Roi-René   
50  #54623  Châteauneuf / des Ormeaux    
51  #54639  Châteauneuf / Rondeau    
52  #54724  Rondeau / Georges    
53  #54735  Rondeau / De La Vérendrye    
54  #54738  Rhéaume / Chaumont   
55  #54740  Chaumont / Guy   
56  #54741  Chaumont / Azilda    
57  #54742  Yves-Prévost / Azilda    
58  #54659  des Ormeaux / Chaumont

这是中间和B之间的一次旅行。

代码语言:javascript
复制
1   #54257  Station Honoré-Beaugrand / Sherbrooke    
2   #53290  Saint-Donat / Sherbrooke     
3   #53265  Saint-Donat / De Forbin-Janson   
4   #54676  Saint-Donat / De Grosbois    
5   #54674  Saint-Donat / Roi-René   
6   #54672  Saint-Donat / les Reaux  
7   #54668  Saint-Donat / Chénier    
8   #54661  Joseph-Renaud / Yves-Prévost     
9   #54646  Joseph-Renaud / Châtillon    
10  #54629  Joseph-Renaud / Wilfrid-Pelletier    
11  #54605  Joseph-Renaud / Châteauneuf  
12  #54609  Châteauneuf / Vaujours   
13  #54610  Châteauneuf / Rabelais   
14  #54612  Châteauneuf / de la Loire    
15  #54621  Châteauneuf / Roi-René   
16  #54623  Châteauneuf / des Ormeaux    
17  #54639  Châteauneuf / Rondeau    
18  #54724  Rondeau / Georges    
19  #54735  Rondeau / De La Vérendrye    
20  #54738  Rhéaume / Chaumont   
21  #54740  Chaumont / Guy   
22  #54741  Chaumont / Azilda    
23  #54742  Yves-Prévost / Azilda    
24  #54659  des Ormeaux / Chaumont

现在,如您所见,这里的stop_sequence 1与35相同。第二站与上面第36站相同。你也可以看到,从35站到58站的计数是24。和第二次旅行一样。

现在,我想知道的是,如何使用PHP合并它们?我想把第二组放在这里,在第一次匹配的时候将它合并到第一组中,所以第二组中的stop_sequence 1将变成stop_sequence 35,因为它匹配,并且是相同的。

使用这种方式,我可以保持停止顺序,而不是在排序结束时使用stop_sequence,因为正如您所看到的,第二次行程的stop_sequence 1等于第一次行程的24。这意味着如果我使用stop_sequence使用MySQL订购,它将顺序排序所有的stop_sequence,因此结果将是stop_sequence 1从第一次行程,序列1从第二次行程,等等,我的顺序将是错误的,所有的停止都将是错误的。

我想在PHP中这样做,但我不知道如何匹配数组中的结果,然后避免X结果,这样我就可以完全匹配。

如果您想知道我的SQL查询是什么,请看下面的内容:

代码语言:javascript
复制
SELECT      t.trip_id, t.trip_headsign, st.stop_sequence, s.stop_id, s.stop_code, s.stop_name
FROM        trips AS t
LEFT JOIN   stop_times AS st ON st.trip_id = t.trip_id
LEFT JOIN   stops AS s ON s.stop_id = st.stop_id
WHERE       t.route_id = 141
    AND     t.trip_id IN (
        SELECT trip_id
        FROM (
            SELECT trip_id
            FROM (
                SELECT      COUNT(*) AS count, trips.trip_id, trips.trip_headsign
                FROM        trips
                LEFT JOIN   stop_times ON trips.trip_id = stop_times.trip_id
                WHERE       route_id = 141
                    AND     trips.trip_id LIKE (SELECT CONCAT(service_id, "%") FROM calendar_dates WHERE date = "20120628")
                GROUP BY    trips.trip_id
            ) a
            GROUP BY count, trip_headsign
        ) a
    )
GROUP BY    t.trip_id, st.stop_id
ORDER BY    t.trip_id ASC, st.stop_sequence ASC

trip_id定义它是否来自A,B,A-中间等等.

stop_sequence是定义的行程的停止顺序。

stop_idstop_code共享相同的东西-唯一的id (一个用于用户,另一个用于内部系统)

trip_headsign类似于141-W或141-N (对于西部或北部)。

编辑

使用我的查询,我可以获得每次旅行的所有停止(绿色和红色在这里)。我想把它合并到一个列表中,保持顺序。示例模式

路线可以从1站(红色)到8站。所以,1站可以是1站,2站等,直到8站为止。

路线可以是从1号站(绿站)到8号站。因此,行程可以是1站、7站和8站。

我的查询给了我两个旅行站的列表。

现在,我想将它们合并如下:

名单:-停止1(红色)-停止2-停止3.-停止6-停止1(绿色)-停止7(一次,即使他是在红色和绿色)-停止8(一次,即使他是在红色和绿色)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-28 15:40:12

总结一下评论中所说的话:

  1. 通过断言第一站是A而最后一站是B找到权威行程
  2. 为彼此的旅行:
    1. 如果第一站是A,它将左/顶对齐主行程
    2. 如果最后一站是B,它将右/底对齐主行程。

或者,您可以从较短的行程的任何一边开始,并删除在主行程中不出现的任何停止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11247044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档