Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> AUTO_INCREMENT i INSERT...
Sedziwoj
post
Post #1





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No więc mam tabelę:
id|numer
(uproszczona)
`id` jest AUTO_INCREMENT, mój problem to jak zrobić aby przy dodawaniu pole `numer` miało tą samą wartość co `id`?
Niby jest LAST_INSERT_ID() ale jak mam tylko jeden INSERT to mi jakoś nie działa, (co po przeczytaniu manuala mnie nie dziwi).

Czy ktoś wie jak rozwiązać ten problem? Bo pole `numer` przy dodaniu ma mieć tą samą wartość co `id` ale potem może się zmieniać (a przecież `id` nie będzie).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


To wyciagnij selectem i sprawdz ile rekordow zwroci jezeli wiecej niz jeden to w zapytaniu uzyj last_insert_id a jezeli nie to daj na sztywno 1
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


skowron-line czy wiesz co piszesz?
LAST_INSERT_ID() zwraca ostatnio wygenerowany numer w a.-inc. w danej sesji (choć czasami trochę inaczej).
Bym miał dwoma zapytaniami to by wyglądało tak:
  1. INSETR INTO `table` (`numer`) VALUE (0);
  2. UPDATE `table` SET `numer` = LAST_INSERT_ID() WHERE `id`= LAST_INSERT_ID();


Ale mi zależy aby to robić jak najmniejszą ilością, dlatego się pytam...
Tylko widzę że nie mam co się na tym forum pytać, bo o bazy danych pytam drugi raz i znów nie mam jakiś satysfakcjonujących odpowiedzi, ba sam podaję jak to rozwiązać...
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Sedziwoj @ 25.04.2007, 19:18:00 ) *
skowron-line czy wiesz co piszesz?


chyba sie zle zrozumielismy mialem na mysli sprawdzanie z poziomu pehape
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #5





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A czy ja gdziekolwiek wspomniałem chociaż o PHP?
Aby wybrać w PHP `id` dodanego właśnie rekordu użył bym mysql_insert_id().
Ale ja chcę to robić na poziomie bazy, po co mam się bawić w PHP przy dodawaniu rekordu. Dlatego nadal czekam na odpowiedź czy da się to lepiej zrobić? (oczywiście w MySQL...)

Wpadł mi pewien pomysł do głowy, ale to jest to samo tylko w innej postaci... więc czekam, bo mimo wszystko w bazach to zemnie cienias.
Go to the top of the page
+Quote Post
kresh
post
Post #6





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


To może spróbuj tak:

  1. SET @max_id=( SELECT max(id) FROM TABLE );
  2. INSERT INTO TABLE (id, numer) VALUES('', @max_id+1);
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #7





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Po pierwsze tworzymy zmienną, po drugie przeszukujemy całą tablice (porównując), max(`id`)+1 może nie być tym co będzie teraz dodany.
Więc moja metoda jest szybsza, bo wykorzystuję coś informację o tym jaki numer `id` został dodany, a UPDATE też nie jest kosztowny (bo index na `id` jest założony)
Go to the top of the page
+Quote Post
kresh
post
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W sumie racja. Poszperałem trochę w temacie i chyba nic lepszego nie da się wykombinować.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:42