![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam w innym temacie pytalem jak zminiac wiersze, ale niestety nie uzyskałem odpowiedzi dlatego wpadłem na inny pomysł tylko potrzebuję jedną informację.
wyswietlanie tabeli polega na:
no i jest fajnie bo wyświetla sie tabela. Świetnie tylko że ja potrzebuje z wiersza poniżej zamienić wiersz[1]. czyli jest a a a b b b a ma być b a a a b b Czy jest jakaś możliwość w php zrobienia czegoś takiego, ale nie poprzez sortowanie? Ten post edytował neo1986kk 22.10.2009, 09:05:18 |
|
|
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Jeśli Cię dobrze rozumiem, to nie bardzo coś takiego uzyskasz bez dodatkowego kodu. Napisz lepiej co chcesz zrobić.
P.S. Dodaj bbcode, w innym wypadku temat zamknę. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tworzę pewnego rodzaju plan, i mam tabelę w której jest id,klient,kod,data rozpoczęcia produkcji, data zakończenia produkcji.
Chcę aby kierownik produkcji miał możliwość zmiany kolejności produkcji, co za tym idzie automatycznie powinna zmieniać się data rozpoczęcia produkcji i data zakończenia. moze podam przykład. Sortowanie po dacie zakończenia. id klient kod data rozpoczecia data zakonczenia 1 a a1 2009-10-20 12:00 2009-10-20 15:00 2 b b1 2009-10-20 15:00 2009-10-20 19:00 3 c c1 2009-10-20 19:00 2009-10-20 20:00 Okazuje się ze klient c potrzebuje towar szybciej i po zmianie powiny się zmienić daty oraz kolejności w ten sposób 3 c c1 2009-10-20 12:00 2009-10-20 13:00 1 a a1 2009-10-20 13:00 2009-10-20 16:00 2 b b1 2009-10-20 16:00 2009-10-20 20:00 Myślę, że jest to bardziej czytelne Ten post edytował neo1986kk 22.10.2009, 09:16:28 |
|
|
![]()
Post
#4
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Sortujesz po dacie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
no to ja wiem ze sortuje po dacie ale ja chce zamienić te daty tak jak na przykładzie powyżej. Samo sortowanie nic nie da, tylko pogorszy sprawę.
|
|
|
![]()
Post
#6
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Musisz sprawdzić czas trwania danej produkcji i na tej podstawie dodać/odjąć czas rozpoczęcia oraz zakończenia dla dwóch sąsiednich rekordów.
P.S. Edytujesz post po moim wpisie i wychodzę na kretyna. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Musisz sprawdzić czas trwania danej produkcji i na tej podstawie dodać/odjąć czas rozpoczęcia oraz zakończenia dla dwóch sąsiednich rekordów. P.S. Edytujesz post po moim wpisie i wychodzę na kretyna. sorry bo akurat napisales a ja kliknalem zapisz... ok wiem jak odjąć czas tylko wlasnie jak to zrobić dla 2 rekordów? chcę zeby to polegało na tym że wyświetla się tabela czyli caly plan i przy każdym rekordzie będzie przycisk, przesuń wyżej lub przesuń niżej i po kliknięciu zmienił sie plan. Ten post edytował neo1986kk 22.10.2009, 09:33:55 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Będziesz musiał wyciągnąć czas trwania zadania (ilość godzin od startu do końca), znać godzinę startu tego "specjala" i każdej po nim wstawionego odpowiednio "przesuwać daty oraz godziny". Posługując się Twoim przykładem...
1 a a1 2009-10-20 12:00 2009-10-20 15:00 2 b b1 2009-10-20 15:00 2009-10-20 19:00 3 c c1 2009-10-20 19:00 2009-10-20 20:00 Wiemy, że C dostał specjala i startuje o 12 zamiast A. Wstawiamy go tam z czasem 12.00 do 13 (bo C trwa godzinę, od 19 do 20). Teraz WSZYSTKIE po nim począwszy od tego z jakim go zamieniliśmy, czyli od A mają sprawdzamy czas trwania i dostosowywane są do zmienionego rozkładu. A więc: A trwa 3 godziny (12-15), więc od 13.00 (czas końca specjala) do 16.00 B trwa 4 godziny(15-19), więc od 16.00 (koniec A) do 20. Zmianom ulegają TYLKO zadania począwszy od tego, które zostało zastąpione do tego przed specjalnym. Na przykładzie nieco szerszym: 1 a a1 12:00 - 15:00 2 b b1 15:00 - 19:00 3 c c1 19:00 - 20:00 4 c c2 20.00 - 21.00 5 b b2 21.00 - 22.00 Gdy 4 ma zacząć się o 15.00... 4 trwa godzinę, a za sobą ma 5, zaś o 15.00 zaczyna się 2, co sprawia, że do korekty godzin kwalifikują się 2 i 3 (tylko one mają czasy startu od 15.00 do starego startu zadania 4 czyli 20.00). Jako że różnica to godzina, więc wszystkim złapanym robimy przesunięcie daty startu i końca zadania o godzinę, zaś priorytetowi stat ustawiamy na ową godzinę i dodajemy czas trwania. Da nam to: 1 a a1 12:00 - 15:00 4 c c2 15.00 - 16.00 2 b b1 16:00 - 20:00 3 c c1 20:00 - 21:00 5 b b2 21.00 - 22.00 Teraz widzisz na przykładzie co się dzieje? Robisz zapytanie do bazy, które zwraca Ci w wyniku rekordy z datami i czasami pomiędzy startem priorytetu a startem tego zadania gdyby było robione normalnie i w nich dodajesz do startu i końca czas trwania zadania priorytetowego. To jest wszystko co musisz zrobić ![]() EDIT: @ Webdice. Jak widzisz w przykładzie, to nie tyle 2 sąsiednie rekordy... Jeśli użyje linków w stylu "Wyżej", "Niżej" to mu wystarczy tylko zmiana czasu w rekordzie priorytetu i tym przed nim. Gdy posłużyłby się "drag&drop", to rozwiązanie jakie przedstawiłem obejmie więcej niż 2 rekordy zapewne. Czyli obejmuje to nie tyle sąsiednie 2 rekordy, tylko rekordy zawsze przed tym priorytetowym. Nigdy po nim następujące. EDIT2: Pamiętaj, że wybrana przez Ciebie godzina może być nieosiągalna (może trwać inne zadanie). Albo przerywasz je i kończysz później (w bazie zrobisz mały bajzel lub będziesz musiał zmienić jej strukturę by na to pozwalała), albo zaczniesz priorytet gdy skończy się trwające wtedy zadanie (rozsądniejsze). Twój pomysł z niżej, wyżej sugeruje podejście drugie. Ten post edytował thek 22.10.2009, 10:23:03 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#9
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Przy założeniu że zmiany polegają na przesuń w górę/dół to id 2 rekordów odczytasz bez problemu (w końcu masz tablice), zastanów się chwilę. Sytuacja troszkę się komplikuje gdy dany rekord możesz przesuwać o niewiadomą ilość pozycji, w tym wypadku zobacz jak wygląda zasada działania nested tree.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
WOW, no dziękuje Ci bardzo za tego posta, ale po pierwszym przeczytaniu nie za bardzo to kumam, muszę to dokładnie przeanalizować,
rozumiem ze daty muszą się zmieniać automatycznie i dopasowywac, tak jak napisałeś ale właśnie nie wiem jak to zrobić. Chodzi o to że odejmę czas rozpoczęcia od wykonania i wyjdzie mi 1h. ok no i najgorsze to jest gdzie to zapisać że bedzie to godzina, może jak sie pobawie to dla jednego rekordu to zrobię, ale nie mam pojęcia jak to zrobić dla wszystkich rekordów... Najlepiej jak by ktoś miał choć kawałek skryptu gotowego, ale nie bede o to prosił, bo po pierwsze zostane wysmiany, a po drugie nie wypada... w każdym razie pokombinuje z tym, dzięki. tylko jeszcze może być później kłopot bo jeśli zamienię 1. a b c d na: b a c d to jest ok ale teraz jeśli bede chcial zamienić jeszcze aby kolejność była b d a c no to juz jest lipa - nie moge czytać po ID |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Musisz policzyć róznicę czasu pomiędzy startem i końcem. Bazy mają funkcje operujące na czasie. Przejrzyj sobie odpowiedni dział manuala. Mając już ją wybierasz rekordy jakie podpadają do zmiany. Gdy masz tylko zmianę o pozycję w górę lub dół to nie problem. Nawet się nieco upraszcza, bo następuje wymiana pewnych danych
![]() Przykład wymiany 2 z 3, zwróć uwagę na kolory: 1 12:00 - 15:00 2 15:00 - 19:00 3 19:00 - 20:00 1 12:00 - 15:00 3 15:00 - 16:00 2 16:00 - 20:00 Jak widzisz pomarańcz się nie zmienił, a niebieski to czas startu plus trwanie priorytetu. Ostatecznie więc priorytet ma godziny: Nowy_start_priorytetu = start_zadania_wcześniejszego, Nowy_koniec_priorytetu = start_zadania_wcześniejszego + czas trwania_priorytetu Nowy_start_przesuniętego = Nowy_start_przesuniętego + czas_trwania_priorytetu, Nowy_koniec_przesuniętego = Koniec_starego_priorytetu Zauważ, że godziny 16 mogą być liczone w różny sposób ![]() ![]() @UP: To zadziała, ale update rekordów musisz robić zaraz po zmianie pozycji wierszy, a nie najpierw porobić zmiany, a potem dopiero UPDATE. Baza musi się aktualizować "w locie", nie czekając na Submit. Linki UP i DOWN muszą wysyłać te informacje do bazy o przesunięciach, dzięki czemu one się przesuną. Zauważ, że Twój "nie działający przypadek" nic nie zmienia. Nie czytamy bowiem po Id, ale po tablicy sortowanej według godziny (i ewentualnie daty) startu zadań. Nie przejmujemy się żadnym id. Po zmianie zadań sortowanie odbywa się według nowych godzin już, więc id mogą być przemieszane, ale godziny są już aktualne. Znajomość id jest więc zbędna tak naprawdę. Co najwyżej się przyda przy UPDATE. Ale czy rekordy te mają id różne o 1 czy 10 to już bez znaczenia. To godzina się liczy, a nie id przy sortowaniu rekordów. Ten post edytował thek 22.10.2009, 10:53:22 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:00 |