Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie wierszy po identyfikatorze
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
martinstw
<b>
Szanowni koledzy!

Stworzyłem tabelkę, gdzie jest pewna ilość wierszy. Problem polega na tym, że w tabelce są pola w których są nazwy np. stanowisk głównych od P1 do P7, oraz dodatkowo na stanowiskach głównych są jeszcze niekiedy stanowiska pomocnicze o oznaczeniach np.: P1.2. Przy czym P1 oznacza stanowisko gł. nr 1, P2- stan. nr 2 itd, natomiast P1.2 to stanowisko pomocnicze nr 2 na stanowisku głównym nr 1.
Nie wiem w jaki sposób można sortować tak, żeby sortowało mi w kolejności od najmniejszej wartości do największej czyli od P1 do P7, uwzględniając numerki np P1.2, P1.3 czy P6.1, P6.2 itd.

Może ktoś ma jakiś pomysł jak ten problem można rozwiązać?
</b>
zegarek84
tabele ale w czym?? - w bazie danych??, czy w pliku?? - jeśli w bazie danych to...

sortuje bez problemu:
  1. SELECT * FROM DATA ORDER BY pppppp

pppppp - ta kolumna z P
martinstw
A co będzie jeśli jest np.: P105 lub P1.1120EL, gdzie 05 i 120EL to kolejne numery operacji. Nie wiem czy tutaj można oddzielać kod P1 lub P1.1 od 05 lub 120EL za pomocą "/" i czy wtedy dalej będzie można sortować tak jak pokazałeś?
zegarek84
nie bardzo zrozumiałem o co Ci chodzi więc załączam obrazek z posortowanymi wynikami winksmiley.jpg - chyba jest tak jak chciałeś...


po zatym poszukaj dodatku do mozilli w google wpisz SQLite Manager i bedziesz mógł bez serwera próbować układać większość zapytań SQL
martinstw
tak właśnie o to mi chodziło:) tylko zastanawiałem się czy jeśli wprowadzę po numerze np P1.3/120EL, czy będzie możliwość sortowania takiego jak napisałeś (wtedy mógłbym jedną kolumnę zredukować i cały numer zmieściłby się w jednej kolumnie, a nie byłby rozłożony na dwie). Bo jeśli chodzi o moją tabelkę to mam tak rozwiązane, ze w jednej kolumnie są P1- P7 a w drugiej kolumnie nr operacji czyli 05, 10, 15, 20 ..... 120EL.....245A.. itd
zegarek84
zauważylem tylko jedno i zaraz napisze jak to można obejsć... dla przykładu P1.2 i P12 - niestety tutaj wcześniej bedzie P12 - czyli nie tak jak sie chce - wynika to z tego, że cyfry są przed znakami.... poprawnie posortuje z kolei:
P01.2
P12

jeśli chcesz połaczyć tabelki i by dalej poprawnie sortowało to pasuje, by dana operacja badź grupa był stałej długości.... czyli np. kropka na tej samej pozycji i ukosnik na tej samej pozycji badź brak znaków - wyrażenia te moga byc krótrze jednak posiadając dany czlon który coś oznacza musi ten człon byc w tym samym miejscu w wyrazie... czyli jeśli urzywasz P1.2 to po P nie może być do kropki cyfry 2 znakowej - można to zapisać P01.32 i dla przykaldu juz można pisać P33

i dalej jesli uzywasz tych schematów P1.32/costam to jeśli używasz to "/costam" to np jesli ustalileś że po tej kropcce sa 2 cyfry to tego się trzymaj.. wiec poprawnie by bylo P2 P3.44 P1.33/costam i jesli nie ma tego po kropce to możesz zapisać jeśli jest to cośtam to P2.00/costam i tesli będziesz się trzymał jakiegoś sztywnego schematu to to co zaproponowałem spokojnie wystarczy do sortowania...

sorki że nie umie tłumaczyć - napisałem też kiedy to sortowanie nie zadziała - spróbuj to przeczytać jeszcze raz - sorki że nie napisałem jasno...
martinstw
Czyli wg Twojego objaśnienia powinno być tak:

P1.0/005
P1.0/010
P1.1/120EL
P2.2/140A

Tylko co się stanie z literami w np w oznaczeniu P2.2/140A?
zegarek84
dobrze zrozumiałeś moja propozycję - ale ona jest tylko na przypadek jeśli byś wszystko chciał trzymać w jednej kolumnie (o tym napomniałeś więc podałem propozycję w tym kierunku)... z literami nic się nie stanie, będzie dalej sortowało wg. liter które mogą się pojawić... zwróć uwagę, że tak skonstruowane zapisy sa posortowane jak wyrazy w słowniku - alfabetycznie - i wcale to że wyraz jest krótszy nie musi znaczyć że bezie on występował wcześniej....


napomniałeś też, że każdy element tego oznaczenia coś znaczy... jeśli chciałbyś szukać po tych elementach to niby są funkcje że można szukać po fragmencie słów jednak nie wiem czy to wtedy będzie wygodne - zastanów się czy warto cale oznaczenie trzymać w jednej kolumnie??

można poszczególne znaczenia trzymać osobno tak jak to miałeś na początku i posortować (przede wszystkim plusem było by to ze nie musiałbyś się trzymać sztywno długości i innych warunków jakie trzeba przestrzegać jeśli jest to jeden wyraz i chyba swobodniejsze sortowanie - a te dodatkowe kolumny aż tak nie spowolnią bazy):
  1. SELECT * FROM DATA ORDER BY kol_1,kol_2,kol_3

gdzie będzie sortowało biorąc pod uwagę przede wszystkim jako najważniejszy argument wartość kolumny 1 (kol_1) a dopiero potem (jeśli np. będą 2 takie same wartości) kolejno będzie sortowało kol_2 i jakie byś tam jeszcze nie dopisał... jeśli będzie priorytetem argument z kolumny 2 to po prostu wystarczy ją wypisać jako pierwsza z lewej po ORDER BY...

pozdro i wydaje mi się że już chyba temat zakończony winksmiley.jpg
martinstw
Myślę że wyczerpująco mi wyjaśniłeś. A jeśli chodzi o twoje rady mam dwie kolumny, w jednej nr stanowiska np P1 a w drugiej nr operacji np 125EL.

Dziękuję za pomoc:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.