Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Automatyczne poprawianie ID
Forum PHP.pl > Forum > Przedszkole
DamianRastMan
Mój problem polega na tym, że chciałbym sortować listę według id w tabeli i je przy tym wyświetlać. Jednak, dane z mojej listy można usuwać przy pomocy polecenia DELETE, co z kolei tworzy dziury. Czyli mając listę:

1. a
2. b
3. c

Chcemy usunąć 'b', co daje nam taki wynik:

1. a
3. c

Co zrobić, by sql automatycznie poprawiał id tak, by nie było dziur?
W tej chwili moje rozwiązanie to po prostu nie używać id, a jedynie w pętli która wyczytuje dane z listy, dodana jest zmienna $no, o wartości która
zwiększa się o jeden z każdym kolejnym wierszem tabeli.

Czy macie może jakiś sposób by uniknąć używania "osobnego" numerowania wierszy?
Będę bardzo wdzięczny za pomoc.
rad11
Najlepiej jak zostawisz to właśnie w taki sposób z tym ze pamiętając aby w id nie podawać $no tylko id z bazy.
Comandeer
Z tym, że to powinny być przecież osobne mechanizmy numerowania.

Pętla wyświetlająca dane z bazy jest elementem warstwy prezentacji. Numerek ma tu bardziej walor "estetyczny" niż pragmatyczny.
Dane w bazie to warstwa danych (szok, co nie? wink.gif). Tutaj ID nie jest numeracją, a po prostu unikalnym i jednoznacznym identyfikatorem konkretnego zasobu i NIE POWINIEN SIĘ ZMIENIAĆ. Z tego prosty wniosek, że usunięty zasób usuwa także swoje ID.

A czemu to ważne? Prosty, obrazowy przykład: wyobraź sobie appkę "Dotacje i datki na polityczne dziatki", w której można przekazać darowiznę na partię polityczną wybraną przez siebie. Oczywiście jako programista napisałeś se bota, który wchodzi pod adres http://politycznedziatki.pl/wspomoz/1 i dajesz datek na Twoją Ukochaną Partię… I teraz se pomyśl, że ktoś tę partię usunął z bazy (bo np. nowy admin appki ma inne preferencje polityczne) i teraz 1 oznacza Twoją Znienawidzoną Partię, a Ty tego nie dostrzegłeś i wciąż przelewasz im 20k miesięcznie wink.gif

Dlatego ID jest unikalne i konkretne ID zawsze powinno wskazywać na ten sam zasób. A jak tego zasobu już nie ma, to ID również nie powinno istnieć.
DamianRastMan
@Comandeer
Rozumiem, co znaczy identyfikator, i masz rację, że istnieją powody, dla których nie powinno się ich zmieniać, kiedy w kodzie podajemy statyczne wczytywanie
danych z bazy dla jakiegoś id.

@rad11
Jeżeli faktycznie dobrym pomysłem jest zostawić to w takiej wersji, to dziękuję, za rady.
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.