Jako the currently accepted answer wydaje się cause problems później, tutaj jest kolejna alternatywa. Jest silnie oparty na numerze the solution by lc., ale zajmuje się zamawianiem.
Po pierwsze: tabele SQL mają brak dobrze zdefiniowanej kolejności rzędu. Gdy wyszukujesz wszystkie wiersze tabeli, wiersze te będą zwracane w określonej kolejności, ale ta kolejność jest niezdefiniowana, może być powiązana z kolejnością dodawania wierszy i może się nieoczekiwanie zmieniać. Jeśli chcesz przetworzyć swoje wiersze w określonej kolejności, powinieneś dodać kolumnę, która będzie zawierała jakiś numer porządkowy lub smili. To jest powód, dla którego lc. kept bugging you o kolejności lokalizacji.
Jeśli masz taką kolumnę, zwany seq
, a następnie można użyć następującego zapytania:
SELECT GROUP_CONCAT(loc SEPARATOR ' - ')
FROM (
(SELECT 1 half, seq, SUBSTRING_INDEX(location, ' - ', 1) loc
FROM location_list
WHERE reservno='00004'
ORDER BY seq
LIMIT 1)
UNION ALL
(SELECT 2 half, seq, SUBSTRING_INDEX(location, ' - ', -1) loc
FROM location_list
WHERE reservno='00004')
ORDER BY half, seq
) locs
Związek będzie produkować listę różnych miejscach, które są połączone w jeden ciąg znaków za pomocą peryferyjnych Wybierz. Pierwsza część związku daje pierwszą połowę pierwszej części trasy, podczas gdy druga część związku daje drugą połowę wszystkich części. Kolejność wyników unii jest do tej pory niezdefiniowana, więc potrzebujemy ogólnej reguły porządkowania. Potrzebujemy także reguły składania zamówień w pierwszej połowie, aby naprawdę wybrać pierwszą część trasy z klauzulą limitu.
Here jest literą pikselową opartą na konfiguracji jednego Omesh.W przypadku braku kolumny seq
używa ona kolumny icode
do zamawiania rzeczy. Dlatego wynik różni się od tego, którego się spodziewałeś, i zamiast tego produkuje Manila - Bohol - Cebu - Manila
.
Jeśli dodasz kolumnę seq
, będziesz musiał zmienić schemat bazy danych, więc równie dobrze możesz go zmienić w taki sposób, aby dwa punkty końcowe każdej części zostały zamienione na dwie odrębne kolumny. Łączenie kolumn za pomocą CONCAT
jest proste, ale ich rozdzielenie zwiększa złożoność zapytań zarówno dla programisty, jak i silnika bazy danych.
Jeśli nie możesz dodać kolumny sekwencji, ponieważ nie masz kontroli nad schematem bazy danych, masz kłopoty. Your comment here wskazuje, że zawsze szukasz cyklu, ale znalezienie takiego cyklu z nieuporządkowanych danych najlepiej wykonać przy użyciu map, który nie jest łatwo dostępny na poziomie SQL. Możesz to osiągnąć poprzez procedurę przechowywaną, jeśli musisz, wykonując jeden wybór dla każdej części jurysdykcji, ale wolałbym rozwiązać ten problem na poziomie aplikacji, gdybym był tobą.
Jak określić kolejność zapisywania rekordów? – eggyal