VippeR
14.10.2008, 17:24:47
Witam,
jestem nowy tu, więc wybaczcie niewiedzę na temat funkcjonowania forum.
Mój problem polega na tym, że potrzebuję poznać numer id który zostanie przydzielony do następnego rekordu.
Szukam po Google'ach, ale tam jest tylko o największym id, a więc nie to, co mnie interesuje.
Mam 3 rekordy o id kolejno 1, 2, 3. Jeżeli teraz dodam rekord, to jego id będzie równe 4. Ale jeżeli usunę rekord 3, to kolejny nowo dodany rekord będzie miał również id równe 4. I ja właśnie potrzebuję wyciągnąć tę "czwórkę", która jeszcze nie powstała, a dopiero powstanie.
Z góry dzięki za pomoc.
batman
14.10.2008, 18:12:22
Jeśli pracujesz na bazie MySQL, to pomoże Ci funkcja
mysql_last_id, jeśli na postgresie to sprawdź funkcję
pg_last_oid.
A jeśli nie ustawiłeś w tabeli autoinkrementacji, to zrób to i nie będziesz musiał martwić się o następne id.
P.S.
Przenoszę na przedszkole i dodaję tag do tematu.
VippeR
14.10.2008, 18:38:47
Pracuję na MySQL. Funkcja, którą podałeś, nie spełni zadania w tym wypadku ponieważ muszę najpierw dodać rekord. A ja chcę poznać id tego rekordu zanim on jeszcze zostanie dodany.
Mam auto_increment'a.
batman
14.10.2008, 18:42:24
No to musisz użyć dwóch zapytań.
1. select max(id) from tabela
2. Twoje zapytanie.
VippeR
14.10.2008, 18:49:03
Nie rozumiesz mnie.
Mam tabele:
id | pole |
--+-----+
1 | bla |
--+-----+
2 | ble |
--+-----+
Jeżeli użyję funkcji max id to dodając 1 do otrzymanego wyniku otrzymam id rekordu, który zostanie dodany (czyli 3 rekordu).
A teraz:
id | pole |
--+-----+
1 | bla |
--+-----+
2 | ble |
--+-----+
Dodałem rekord 3 (czyli id=3) ale go usunąłem. Potem znowu dodałem rekord, lecz teraz id równa się 4, a nie 3 (pomimo, że 3 został usunięty). Przy max id nie otrzymam numeru id rekordu, który zostanie dodany w przyszłości, a jedynie numer id rekordu o największym id.
batman
14.10.2008, 18:52:58
Nie widzę problemu. Skoro usunąłeś wiersz o id=3, a następnie ponownie go dodasz, to nic się nie stanie, tzn nie pojawi się błąd.
Ale jeśli nadal się upierasz, że potrzebujesz pobrać nowe id, to musisz poszukać w dokumentacji MySQL-a i sprawdzić, jak odpytać bazę, by zwróciło Ci aktualną wersję auto_increment. Niestety nie pomogę w tym, ponieważ nie używam MySQL-a.
editPoszukałem na google i znalazłem
takie coś. Nie wiem, czy działa.
VippeR
14.10.2008, 19:15:39
numer id jest mi potrzebny do zapisu plikow, widac nie skumales
najwazniejsze jest to, ze jezeli usune wietrsz o id 3 to po ponownym dodaniu jego id bedzie mialo 4
i potrzebuje wiedziec jakie id bedzie mial rekord ktory dodam (w przyszlosci)
mialam nadzieje ze tutaj znajde rozwiazanie, no ale coz...
w kazdym razie dzieki za zainteresowanie
batman
14.10.2008, 19:22:31
Na prawdę nie rozumiem po co tak sobie utrudniać życie.
Sprawdź linka w moim poprzednim poście. Może o to Ci chodzi. Jeśli nie, to nie ma sposobu pobrania następnej wartości pola.
phpion
14.10.2008, 20:00:21
Sprawdź to:
http://www.bram.us/2008/07/30/mysql-get-ne...-fromfor-table/Wygląda obiecująco *.
* zapewniam, że działa poprawnie - przed chwilą sprawdziłem.
drPayton
15.10.2008, 05:50:12
Cytat(batman @ 14.10.2008, 19:52:58 )

Nie widzę problemu. Skoro usunąłeś wiersz o id=3, a następnie ponownie go dodasz, to nic się nie stanie, tzn nie pojawi się błąd.
(...)
A spójność?
No wiesz? Po kimś początkującym tobym mógł się tego spodziewać, ale po Tobie?
batman
15.10.2008, 07:06:19
Cytat
No wiesz? Po kimś początkującym tobym mógł się tego spodziewać, ale po Tobie?
Autorowi najwyraźniej nie zależy o integralności danych, więc nawet o tym nie wspomniałem.
Jeśli miałbym w każdym przypadku opisywać zagadnienia związane z danym tematem, to musiałbym pisać eseje na kilka stron
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.