Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z numerowaniem pól.
Forum PHP.pl > Forum > Bazy danych > MySQL
terminator211
Witam wszystkich szanownych użytkowników.
Nie wiem, czy ten temat założyłem w dobrym dziale, ale mimo tego bardzo proszę o pomoc. Mam tabelę w MySQL z czterema polami(id, tytul, tresc, data). Jak można się domyślić pierwsze pole zawiera identyfikator danego wpisu (nie zastowałem tu autoinkramentacji tylko mój własny skrypt PHP). Więc powiedzmy, że mam 10 wpisów w tej tabeli. W polu "id" mam teraz liczby od 1 do 10. Ale co się stanie, gdy usunę przykładowo wpis, którego numer identyfikatora wynosi 5? W numeracji powstanie wielka luka (po liczbie 4 wystąpi 6). Napisałem więc skrypt, który po usunięciu wybranego przezmnie wpisu obniży numery identyfikatorów wszytkich pól "id", które miały wartość większą od tej, którą usunęliśmy (np. jak wybierzemy do usunięcia wpis o identyfikatorze 5, to obniżone o 1 zostaną identyfikatory od 6 wzwż). Oto kod owego skryptu, który niestety nie działa:
  1. <?php
  2. if(isset($_GET['numer']))
  3. {
  4. $sql_conn = mysql_connect('localhost', 'nick', 'haslo');
  5. mysql_select_db('jakasbaza', $sql_conn);
  6. $id = $_GET['numer'];
  7. $zapytanie1 = "DELETE FROM `jakastabela` WHERE `id`='".$id."'";
  8. $idzapytania1 = mysql_query($zapytanie1);
  9. $zapytanie2 = "SELECT `tytul` FROM `jakastabela` WHERE `id`>'".$id."'";
  10. $idzapytania2 = mysql_query($zapytanie2);
  11. $podlicz2 = mysql_num_rows($idzapytania2);
  12. $wynik2 = mysql_fetch_row($idzapytania2);
  13. if($podlicz2 > 0)
  14. {
  15. for($i=0; $i<$podlicz2; $i++)
  16. {
  17. $a = $wynik2[$i];
  18. $zapytanie11 = "SELECT `id` FROM `jakastabela` WHERE `tytul`='".$a."'";
  19. $idzapytania11 = mysql_query($zapytanie11);
  20. $wynik11 = mysql_fetch_row($idzapytania11);
  21. $b = $wynik11[0];
  22. $c = $b - 1;
  23. $zapytanie12 = "UPDATE `jakastabela` SET `id`='".$c."' WHERE `id`='".$b."'";
  24. $idzapytania12 = mysql_query($zapytanie12);
  25. }
  26. }
  27. }
  28. ?>


Jak widać najpierw nasz skrypt usuwa wybrane przez nas pole, a potem, wykorzystując pętlę for obniża wszystkie identyfikatory większe od tego wybranego o 1. Taka jest teoria. W praktyce skrypt nie spełnia swojej funkcji. Ma ktoś pomysł, dlaczego owy skrypt nie działa? Byłbym bardzo wdzięczny za pomoc.


Z wyrazami szacunku, terminator211.
nospor
Po pierwsze i najważniejsze: czemu zrezygnowałeś z autoincrement i co ci w ogole przeszkadzają te dziury? Dziury normalna sprawa że są.

Po drugie: obnizenie wszystkich ID wykonuje się jednym banalnym zapytaniem, że zadnego pobierania czy petli:
  1. UPDATE tabela SET pole = pole -1 WHERE pole > 5

gdzie 5 to id, które wlasnie kasowalismy
terminator211
Przepraszam, może nie bardzo sprecyzowałem moje potrzeby. Otóż piszę system, w którym dodaję powiadomienia do tabeli, a potem je wyświetlam. To żeby nie było dziur jest potrzebne do prawidłowego wyświetlenia wyników z tej tabeli.
nospor
Cytat
Otóż piszę system, w którym dodaję powiadomienia do tabeli, a potem je wyświetlam
A w czym tu przeszkadza autoincrement? W niczym.
Cytat
To żeby nie było dziur jest potrzebne do prawidłowego wyświetlenia wyników z tej tabeli.
Również dziury w niczym nie przeszkadzają.

Jeśli ci coś tu przeszkadza, znaczy, że źle się z tym obchodzisz.
terminator211
Nospor, bardzo dziękuję ci za pomoc. Niepotrzebnie użyłem pętli do zmniejszania identyfikatorów (wystarczyło zapytanie, które napisałeś). Jeszcze raz bardzo Ci dziękuję. smile.gif
nospor
Proszę.
Nie mniej jednak nadal uważam że źle podchodzisz do tematu. No ale to Twoja sprawa.
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.