Tôi bị kẹt ở một vấn đề rất lạ. Tôi có nghĩa là tôi không làm thế nào để đe dọa điều này.Tôi có thể sử dụng thợ cơ khí nào để đặt hàng một mảng?
Về cơ bản, tôi nhận được trang web nơi tôi liệt kê tất cả các điểm dừng cho tuyến đường xe buýt đã xác định (ví dụ: route_id = 141
). Đôi khi, một con đường, có thể bắt đầu từ điểm A và đi đến điểm B về mặt lý thuyết từ một đầu cuối đến một trạm cuối khác. NHƯNG, đôi khi, cùng một tuyến đường có thể bắt đầu chuyến đi của mình ở đâu đó giữa A và B và đi vào thời điểm A hoặc B.
Bạn có thể thấy một ví dụ làm việc trực tiếp tại địa chỉ này: http://stm.tranzit.ca/bus/stops/85/Hochelaga/
siêu bốc thăm của tôi:
Regular trip
Start(A) ----------------------------------- End(B)
Sometime
Start --------------------- End(B)
Start(A) ---------------------- End
vv .. Luôn luôn ở giữa điểm A và B. 90% thời gian từ A đến B nhưng 10% khác có thể ở bất kỳ vị trí nào giữa đó cho đến một điểm khác giữa đó (đôi khi là từ giữa đến A hoặc B).
Ok. Trước khi tôi phân loại kết quả của tôi bằng cách sử dụng stop_sequence. Tôi biết thứ tự của chuỗi dừng, vì vậy dừng lại 1, dừng 2, vv và bao nhiêu dừng lại bởi chuyến đi (một chuyến đi là từ A đến B, hoặc A đến giữa, vv).
Bây giờ, tôi đã tìm cách sắp xếp kết quả theo chuyến đi và phân biệt chúng vì vậy bây giờ tôi biết tất cả chuyến đi tôi nhận được (A-B, B-A, A-trung, B giữa, vv ..).
Vì vậy, nếu giả sử tôi nhận được A-B, B-A, A-Trung và B-Trung, tôi có 4 chuyến đi cho một tuyến đường. Sau đó tôi lấy tất cả các điểm dừng được liên kết với nó.
Ví dụ, đây là danh sách cho chuyến đi từ A đến B cho tuyến đường đã xác định. Xin lưu ý giá trị tại 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
Dưới đây là một chuyến đi giữa giữa và 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
Bây giờ, như bạn có thể thấy, stop_sequence 1 ở đây là giống như 35. dừng thứ hai là giống như điểm dừng 36 ở trên. Như bạn có thể thấy, số đếm từ điểm dừng 35 đến 58 là 24. Tương tự như chuyến đi thứ hai.
Bây giờ, những gì tôi muốn biết, là làm thế nào tôi có thể hợp nhất chúng bằng cách sử dụng PHP? Tôi muốn giả sử nhóm thứ hai ở đây và hợp nhất nó bên trong cái đầu tiên ở lần xuất hiện đầu tiên khớp với nhau, vì vậy stop_sequence 1 từ nhóm thứ hai sẽ trở thành stop_sequence 35 vì nó khớp và nó giống nhau.
Sử dụng cách này, tôi có thể giữ lệnh dừng, không phải bằng cách sử dụng stop_sequence ở cuối quá trình đặt hàng, vì như bạn đã thấy, chuyến đi thứ hai có stop_sequence 1 bằng 24 trên chuyến đầu tiên. Điều đó có nghĩa là nếu tôi đặt lệnh bằng stop_sequence bằng MySQL, nó sẽ sắp xếp tuần tự tất cả stop_sequence để resulst sẽ stop_sequence 1 từ chuyến đi đầu tiên, chuỗi 1 từ chuyến thứ hai, v.v. và thứ tự của tôi sẽ sai về tất cả các điểm dừng sẽ bị xóa.
Tôi muốn làm điều này bằng PHP nhưng tôi không biết cách kết hợp kết quả trong một mảng và tránh kết quả X sau đó để tôi có thể khớp hoàn hảo.
Nếu bạn muốn biết truy vấn SQL của tôi là gì, ở đây là:
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
xác định nếu nó là từ A-B, B-A, A-giữa, vv
stop_sequence
là thứ tự của điểm dừng chân cho một chuyến đi định nghĩa
stop_id
và stop_code
chia sẻ điều tương tự - id duy nhất (một cho người dùng và một cho hệ thống nội bộ)
trip_headsign
cũng giống như 141-W hoặc 141-N (về phía tây hoặc bắc).!
EDIT:
Với truy vấn của tôi, tôi có thể nhận được tất cả dừng lại cho mỗi chuyến đi (màu xanh lá cây và màu đỏ ở đây). Tôi muốn hợp nhất điều này trong một danh sách bằng cách giữ lệnh. example schema
Route có thể từ dừng 1 (màu đỏ) để ngăn chặn 8. Vì vậy, chuyến đi 1 có thể được ngăn chặn 1, dừng 2, vv cho đến khi dừng 8.
Route có thể từ dừng 1 (màu xanh) để ngăn chặn 8. Vì vậy, chuyến đi có thể dừng lại 1, dừng 7 và dừng lại 8.
Truy vấn của tôi cung cấp cho tôi cả hai danh sách dừng của chuyến đi.
Bây giờ, tôi muốn kết hợp chúng như sau:
liệt kê: - Stop 1 (màu đỏ) - Stop 2 - Dừng 3 .... - Dừng 6 - Stop 1 (màu xanh lá cây) - Dừng 7 (một lần ngay cả khi ông đang ở trong chuyến đi màu đỏ và màu xanh lá cây) - Dừng 8 (một lần ngay cả khi ông đang ở trong chuyến đi màu đỏ và màu xanh lá cây)
Truy vấn của bạn cung cấp cho bạn nhiều chuyến đi cho tuyến đường đó ngay? Và bạn muốn "sắp xếp" các chuyến đi ngắn hơn với những chuyến đi dài hơn? –
@Jack Truy vấn này sẽ trả về tất cả các nhóm được dừng theo chuyến đi. Vì vậy, chúng ta hãy nói rằng tôi có chuyến đi từ A đến B, giữa B và B đến A, nó sẽ quay trở lại tất cả dừng lại theo trình tự tốt cho mỗi chuyến đi. Nếu chúng ta xem xét truy vấn này với ví dụ trên, ví dụ trên trả lại 2 chuyến đi (A-B và từ trung bình đến B). Tôi muốn hợp nhất B thành A BECAUSE B phù hợp với một phần của nó. Vì vậy, cuối cùng, thứ tự được giữ lại và tôi không có nhiều danh sách. Chỉ một danh sách. –
Đợi đã, bạn có thể giữ chuyến đi dài nhất về số điểm dừng không? Điều đó không phải lúc nào cũng đúng? –