Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Rozłożenie wierszy w tabeli
neo1986kk
post
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:

  1. while ($wiersz = mysql_fetch_row($idzapytania))
  2. {
  3.  
  4. echo wiersz[1] wiersz[2] wiersz[3];
  5. }

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





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ć (IMG:style_emoticons/default/smile.gif)

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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 07:48