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




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 (IMG:style_emoticons/default/winksmiley.jpg)
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 (IMG:style_emoticons/default/winksmiley.jpg) A to nie jedyne sposoby. Jest jeszcze co najmniej jedna w mojej głowie liczona jako różnica czasów pomiędzy końcami starymi. Może więc ta godzina być wyliczona na kilka sposobów, a potem tylko użyć UPDATE na obu wierszach (IMG:style_emoticons/default/smile.gif)

@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
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: 11.10.2025 - 23:48