Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] auto_increment
Forum PHP.pl > Forum > Przedszkole
matiszon
Witam w swojej bazie MySQL mam kolumnę o nawie id jej wartość wzrasta o 1 z każdym nowym rekordem. Chciał bym wiedzieć czy jest możliwość uzupełnienia tego id od nowa?

Tzn. mam 3 rekordy i jak skasuje ten o id 2 to mi zostaje 1 i 3, da się tak zrobić zeby te rekordy miały 1 i 2?
skowron-line
Z poziomu php tak z poziomu mysql nie, raczej nie (nie spotkałem się z rozwiązaniem albo nie pamiętam )
matiszon
Pytam się ponieważ mam pętle for która się powtarza tyle razy ile jest rekordów w tabeli i jak sobie skasuje rekord np 1 i 2 a dodane zostaną 3 nowe to w tedy id będzie wyglądać tak.
3
4
5
a for zapętli 3 razy i odczyta aby rekord o id 3
skowron-line
to może łatwiej zmienić metodę wyciągania danych z bazy. A nie jakąś herezje pisać.
Kshyhoo
Możesz ponownie użyć "dziur":
  1. ALTER TABLE nazwa_tabeli AUTO_INCREMENT=1;

Co oznacza, ze baza użyje pierwszego wolnego pola po wartości 1.
koderrr
mysql to relacyjna baza danych
a numer rekordu nie ma zadnego znaczenia
matiszon
ksyhoo nie działa :/

wpisuje to w zapytaniu sql ze swoja nazwa tabeli pozniej kasuje jeden rekord i i dodaje nowy i i tak ma id ostatnie i zostaje luka 1 3 4 5
neverever
auto_increment tak już został stworzony by numerować kolejno rekordy.

Nikt jednak nie zmusza cię do jego stosowania - zawsze możesz sobie numerować rekordy wedle własnego uznania.

Co do autoincrement, to to jest kilka metod rozwiązania -jedno jak wyżej - przebudowa całej tablicy (ale tu jest problem relacji)

inny sposób to kod, jaki gdzieś kiedyś spotkałem
  1. <?
  2. $tabela = "osoby";
  3.  
  4. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  5. and mysql_select_db($sql_baza)) {
  6.  
  7. $wynik1 = mysql_query("SET @n:=0, @m:=0");
  8. if ($wynik1) {
  9. $wynik2 = mysql_query("SELECT id, (@m:=@m+1) as nr
  10. FROM $tabela GROUP BY id HAVING id<>(@n:=@n+1) LIMIT 1");
  11. if (mysql_num_rows($wynik2)==0) {
  12. $wynik2 = mysql_query("SELECT max(id)+1 as nr FROM $tabela");
  13. }
  14. }
  15.  
  16. } else echo "Nie można połączyć się z bazą danych...";
  17.  
  18. if ($wynik2 and $dane = mysql_fetch_array($wynik2)) {
  19. $nr = $dane["nr"];
  20. } else echo "Błąd w danych...";
  21.  
  22. echo "Najniższy dostępny numer indeksu to: $nr";
  23. ?>


Lub inaczej, pobierasz najmniejszy id (nazwijmy go min_id) i sprawdzasz czy jest większy od 1, jesli tak, to w dodawanym rekordzie dajesz dla pola autoincrement wartość min_id-1, w przeciwnym wypadku dodajesz jak zwykle.
matiszon
Dzięki za kod pokombinuje sobie z nim biggrin.gif
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.