我被困在一個非常奇怪的問題。我的意思是我不會如何威脅這一點。我可以使用什麼機制來訂購數組?
基本上,我得到了一個網頁,列出了定義的公交路線的所有車站(例如,route_id = 141
)。有時候,一條路線可以從A點開始,理論上從B點到另一個終點B點。但有時,同樣的路線就可以開始其A和B之間的某個地方旅行,去點A或B.
您可以在此地址查看現場工作示例:http://stm.tranzit.ca/bus/stops/85/Hochelaga/
我的超級大抽獎:
Regular trip
Start(A) ----------------------------------- End(B)
Sometime
Start --------------------- End(B)
Start(A) ---------------------- End
etc ..它總是在A點和B點之間。從A點到B點的時間有90%,但其他10%可以在那裏點到點之間的任何點(有時是從中點到A或B)。
好的。在我使用stop_sequence對結果進行排序之前。我知道停車順序的順序,所以停車1,停車2等等,以及多少次停車(旅行是從A到B,或A到中等等)。
現在,我找到了一種方法來排序我的結果旅行和清楚他們,所以現在我知道我得到的所有旅程(A - B,B - A,中間,中間B等)。所以如果我們說我有A-B,B-A,A-Middle和B-Middle,我有4種可能的路線旅行。然後我把所有停止鏈接到它。
例如,這是一個定義路線的旅程A到B的列表。請stop_sequence注意值35
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之間的行程現在
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,因爲正如您所見,第二次行程在第一次行程中具有等於24的stop_sequence 1。這意味着如果我通過使用MySQL的stop_sequence命令,它將按順序順序排列所有stop_sequence,所以resulst將從第一次旅行開始爲stop_sequence 1,從第二次旅行開始,序列1等,並且我的順序在所有站點都會出錯是錯誤的。
我想這樣做在PHP中,但我不知道如何匹配數組中的結果,並避免X後的結果,因此我可以完美匹配。
如果你想知道什麼是我的SQL查詢,那就是:
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,B-A,A-中間等的
stop_sequence
是停止的用於定義的跳閘
stop_id
和stop_code
共享相同的東西的順序 - 唯一ID(一個用於用戶和一個用於內部系統)
trip_headsign
是像141-W或141-N(西部或北部)。
編輯:
隨着我的查詢,我可以得到所有停止每一行(綠色和紅色在這裏)。 我想通過保持訂單將其合併到一個列表中。 example schema
路線可以是從停止1(紅色)以停止8.所以跳閘1可以是1停止,停止2等直至停止8.
路線可以是從停止1(綠色)以停止8.所以旅行可以停止1,停止7和停止8.
我的查詢給我兩個旅行停止的名單。
現在,我想將它們合併爲:
名單: - 停止1(紅色) - 停止2 - 停止3 .... - 停止6 - 停止1(綠) - 停止7(一次,即使他在旅途紅色和綠色) - 停止8(一次,即使他在旅途紅色和綠色)
您的查詢爲您提供多次該航線的旅程嗎?你希望將較短的行程與較長的行程「對齊」? –
@Jack此查詢將返回按行程分組的所有站點。假設我的旅行A到B,中間到B和B到A,它會在每次旅行的順序中返回到所有的停車位。如果我們用上面的例子考慮這個查詢,上面的例子返回2次旅行(A-B和B中間)。我想把B合併成一個BECAUSE B匹配它的一部分。所以最後,訂單保持不變,我沒有多個列表。只有一個列表。 –
等一等,難道你不能以停站次數來保持最長的旅程嗎?這不是總是正確的嗎? –