Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie rekordu, zmiana pozycji
Forum PHP.pl > Forum > Bazy danych
ZeTu
Witam.
Mam kolejny problem gdy usunę z bazy rekord z pola pozycja np. 2 to jest wtedy tak jakby luka 1, 3, 4, 5,... a jak zrobić żeby wszystkie które są poniżej zmieniły swoją pozycję o jeden w górę czyli 3 to 2, 4 to 3, 5 to 4?
Kshyhoo
To złe myślenie, popsuje bazę danych - konkretnie zależności między tabelami. Tak musi być. Bazie to nie przeszkadza wink.gif

A jak się upierasz, to możesz kombinować tak:
  1. UPDATE tabela_z_rekordami SET id_rekordu=id_rekordu-1 WHERE id_rekordu>9 ORDER BY id_rekordu DESC;

Czyli zmniejszysz ID o -1 dla rekordów o numerze większym od9...
ZeTu
No ale jak później klikam w górę by przenieść o jeden w górę np. rekord o pozycji 3, to zmienia na 2, ale nie podmienia z pozycją 1, czyli wtedy muszę kliknąć 2 razy by zamienić za pozycję 1.
Kshyhoo
Co klikasz? Pokaż kod.
ZeTu
OK to zaraz sprawdzę jak działa.
Tak to ma wyglądać?
  1. mysql_query("UPDATE cmsek_menu SET pozycja=$menurs-1 WHERE pozycja>$menurs ORDER BY pozycja DESC");

Gdzie $menurs to pozycja jaką usuwamy
Bo zamienia pozycję we wszystkich rekordach.
PS: Moja struktura tabeli wygląda tak; pozycja, nazwa, adres, id
Kshyhoo
Masz napisane:
UPDATE // zmień
tabela_z_rekordami // nazwa tabeli
SET // ustaw
id_rekordu=id_rekordu-1 // ID=ID-1, czyli odemnij 1 od numeru rekordu
WHERE // gdzie
id_rekordu>9 //numery ID są większe od 9
ORDER BY id_rekordu DESC; // bleble

Czyli masz rekordy 1, 2, 3, 4, 5, 6, 7, 8, 9, 11... - brak 10.
Po użyciu w/w kodu, wszystkie rekordy począwszy od ID=10 zostaną zmiejszone o 1, innymi słowy, rekord o ID=10 bedzie miał ID=9, ID=11 będzie ID=10, itd...
ZeTu
I sie pogubiłem
  1. if ($_POST["Usun"]!="")
  2. $menurs2asd=$menurs-1;
  3. {
  4. $zapytanie3 = mysql_query("DELETE FROM `cmsek_menu` WHERE pozycja='$menurs'");
  5. $zapytanie3a = mysql_query("UPDATE cmsek_menu SET $menurs=$menurs-1 WHERE id>$menurs2asd ORDER BY $menurs2asd DESC");
  6. echo "Podstrona o nazwie xyz została usunięta<br>";
  7. }

I znowu coś źle zrobiłem, wiem co znaczy UPDATE, SET, WHERE, ale nie wiem co podmienić czy mam zostawić np. id_rekordu, czy podmienić pod $menurs itp.
Kshyhoo
A chcesz zmienić numery ID rekordów w bazie, czy zrobić menu do przechodzenia pomiędzy rekordami w PHP?
ZeTu
Ok zwracam honor źle zrozumiałem
Mogłeś powiedzieć, że wystarczy, że na końcu zmienię na $menurs i by było ok smile.gif
  1. mysql_query("UPDATE cmsek_menu SET pozycja=pozycja-1 WHERE pozycja>$menurs");

I teraz działa smile.gif dzięki
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-2025 Invision Power Services, Inc.