Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wyeliminować przerwę w kolumnie 'id' po wykasowaniu jednego rekordu ze środka
Forum PHP.pl > Forum > Przedszkole
grywalny
Mam nadzieje ze udalo mi sie wytlumaczyc o co mi chodzi juz nawet w temacie. Mam kilka rekordow posortowanych wedlug kolumny 'id' ktora jest autoincrement. Powiedzmy ze mam 5 pozycji

STRING value INT id
billups 1
hamilton 2
prince 3
wallace 4
ben 5



wykasuje jeden z nich np 'prince' i zrobi sie przerwa. bedzie:

STRING value INT id
billups 1
hamilton 2
wallace 4
ben 5


Co zrobic zeby ta przerwe automatycznie zniwelowac? Zeby sie od momentu kasowania samo przekalkulowalo i konczylo w moim przypadku na 4 a nie na 5 i zeby nie bylo przerw?
mk321
http://pl.wikibooks.org/wiki/PHP/Zarz%C4%85dzanie_rekordami
Cytat
Wykonując wiele zapytań DELETE oraz INSERT zauważysz, że pozostają Ci luki w numeracji. Spróbuj dodać teraz jakiś rekord. Jeżeli wykonałeś wcześniej zapytanie kasujące ten o ID 3, MySQL pozostawi tam lukę, nadając nowemu rekordowi następny w kolejności ID - 4. Prawdopodobnie z przyczyn estetycznych niektórym nowym programistom to zachowanie przeszkadza, lecz jest to zupełnie błędne podejście do problemu. Jak wspomnieliśmy bowiem, MySQL jest relacyjną bazą danych, w której rekordy z jednej tabeli mogą być połączone odpowiednimi relacjami z rekordami w drugiej. Wyobraźmy sobie więc, co by się stało, gdybyśmy skasowali jakąś kategorię np. newsów w naszym serwisie, a potem dodali nową i okazało się, że MySQL zaliczył w jej poczet wszystkie newsy z tej usuniętej, gdyż nowy rekord zajął pustą lukę w numeracji. Działanie takie stwarza poważne zagrożenie synchronizacji bazy i wprowadza w nią element losowości. Dlatego zaufaj twórcom serwerów DB, oni naprawdę znają się na rzeczy i nie podejmuj zbędnych prób zmieniania na gorsze tego, co wyraźnie służy zarówno tobie, jak i twojej bazie.
Naprawdę musisz to zmieniać? Jeśli gdzieś wykorzystujesz numerowanie z bazy danych jako kolejne to zmień to. Dać zapytanie do bazy, żeby zwróciło kolejne rekordy numerowane w kolejności.

Jeśli koniecznie chcesz to pierwsze co mi na myśl przychodzi to pętla w php z zapytaniem do bazy. Odczytuje rekord i zapisuje (zapisując id jako kolejny przebieg pętli).
Możliwe, że da się to też zrobić samym sql-em.
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.