1 回答

TA貢獻1735條經驗 獲得超5個贊
這可能不是優化的方式,但您可以得到如下答案:
這里順序很重要,您必須將這兩個變量視為源和目標。
這里
Sion
是源頭,GTB
也是目的地。如果您有不同,則將源值替換為 的所有值,將Sion
目標值替換為 的所有值GTB
。--
符號用于區分兩個站,如果一個站有代表另一個站的子字符串。LikeSion Circle
hasSion
as 子串,代表另一個站。
邏輯:
對于任何目的地的任何路線,這兩個站點都應該存在。因此,我們
WHERE
對兩個輸入都使用了子句,并IN
為 all使用了運算符stops
。CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,...,Destination, '--')
它創建一個由分隔的所有站的列表,--
并--
在兩端添加。例如--A--B--C--D--
。為什么
--
要添加,這樣我們就可以對一個電臺進行完全精確的搜索,這樣它就不會與其他電臺重疊。
Example: if I have to search 'Sion' then search will be `--Sion--`
--Sion--Sion Circle--BC : Return true
--Sion Circle--BC--AKDKJ--: return false, simple search would have return true.
SUBSTRING_INDEX 用于根據源或目的地去除不必要的左右部分路由
再次向新生成的路由添加源和目的地以顯示完整的路由。
最后刪除所有--為計算目的而添加的。
查詢:
SELECT
b.RouteID,
b.BusNo,
REPLACE(CONCAT_WS(' ', 'Sion', SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination, '--'), '--Sion--', -1), '--GTB--', 1),'GTB'),'--', ' ') as route
FROM busroute b
WHERE 'GTB' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination)
AND 'Sion' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination);
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報