Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Ostatnie ID z tabeli
Forum PHP.pl > Forum > Przedszkole
wbeatn
Robię galerię. Chciałbym aby każde nowe dodane zdjęcie do bazy, w tabeli miało nazwę odpowiadająca jego ID. Czyli jeśli zdjęcie jest z wiersza o ID 24 to w rubryce FILE_NAME ma być 24.jpg

Aby to uzyskać chcialem przy wykonywaniu skryptu, aby pobieralo ostatnie najwyzsze ID z tabeli i po dodaniu 1 utworzyło wymaganą nazwę pliku.

  1. $cid=mysql_query("SELECT USER_ID FROM gzdjecia ORDER BY USER_ID DESC LIMIT 0,1");
  2. echo $cid;


  1. $cid=mysql_query("SELECT max(USER_ID) FROM gzdjecia");
  2. echo $cid;


Niestety oba powyższe wyświetlają mi 'Resource id #13' ....

  1. $cid=mysql_query("SELECT * FROM gzdjecia ORDER BY USER_ID DESC LIMIT 0,1");
  2. echo $cid['USER_ID];


... taki nie wyświetla kompletnie nic.

Co robię źle ?
gitbejbe
  1. $cid= mysql_fetch_array(mysql_query("SELECT USER_ID FROM gzdjecia ORDER BY USER_ID DESC LIMIT 1"));
  2. echo $cid['USER_ID'];
phpion
Jeśli nadajesz nazwę plikowi zaraz po wykonaniu INSERTa do bazy to najlepszym wyjściem będzie mysql_insert_id
wbeatn
gitbejbe dziękuję smile.gif)

Cytat(phpion @ 21.08.2013, 09:04:25 ) *
Jeśli nadajesz nazwę plikowi zaraz po wykonaniu INSERTa do bazy to najlepszym wyjściem będzie mysql_insert_id


Przy takim rozwiązaniu

  1. (...)
  2. // $id=$cid['USER_ID']+1;
  3. (...)


Wszystkie dodane za jednym razem zdjęcia mają nazwę 0.jpg chociaż zakres USER_ID to od 1 do 3.
phpion
mysql_insert_id jest jedynym prawidłowym rozwiązaniem w tej sytuacji. To, że otrzymujesz 0 wynika pewnie z tego, że wywołujesz tą funkcję przed dodaniem rekordu do bazy, a powinieneś po.

Rozwiązanie podane przez ~gitbejbe wykrzaczy się na banalnym przypadku. Przypuśćmy, że ID ostatniego użytkownika to 10. Z jakiegoś powodu go kasujesz, więc aktualnie największe ID to 9. Dodajesz nowego użytkownika - otrzymuje on ID 11, a fotka (czy co tam masz) ID 10 (9 + 1). W tym momencie numeracja użytkownik-fotka całkowicie Ci się rozjeżdża.
gitbejbe
a jak na jego stronie, ten skrypt jest dostepny dla zwykłych śmietelnikow ? tzn ze w tym samym czasie zdjęcia moze wrzucic kilka osob ? mysql_insert_id nadal bedzie dobrze dzialac ?

wydaje mi sie, że najpewniej byłoby najpierw dodać rekord do bazy tak aby pojawiło się te id, i dopiero w 2 zapytaniu wyszukac ten rekord po jakimś parametrze i jego id przypisac do nazwy fotki. Poprawcie mnie jeśli się mylę
mmmmmmm
Cytat(gitbejbe @ 22.08.2013, 08:32:43 ) *
a jak na jego stronie, ten skrypt jest dostepny dla zwykłych śmietelnikow ? tzn ze w tym samym czasie zdjęcia moze wrzucic kilka osob ? mysql_insert_id nadal bedzie dobrze dzialac ?

wydaje mi sie, że najpewniej byłoby najpierw dodać rekord do bazy tak aby pojawiło się te id, i dopiero w 2 zapytaniu wyszukac ten rekord po jakimś parametrze i jego id przypisac do nazwy fotki. Poprawcie mnie jeśli się mylę

Mylisz się.
wbeatn
Cytat(phpion @ 22.08.2013, 07:32:02 ) *
Rozwiązanie podane przez ~gitbejbe wykrzaczy się na banalnym przypadku. Przypuśćmy, że ID ostatniego użytkownika to 10. Z jakiegoś powodu go kasujesz, więc aktualnie największe ID to 9. Dodajesz nowego użytkownika - otrzymuje on ID 11, a fotka (czy co tam masz) ID 10 (9 + 1). W tym momencie numeracja użytkownik-fotka całkowicie Ci się rozjeżdża.


Tak! Nie pomyślałem o tym mimo iż możliwość usuwania zdjęć jest w kodzie. Dzięki za zwrócenie uwagi, bo użycie pierwotnego sposobu pozbywa tego problemu tylko jeśli zostaną usunięte z bazy wcześniej dodane foty, a nie ta ostatnia.

Cytat(phpion @ 22.08.2013, 07:32:02 ) *
mysql_insert_id jest jedynym prawidłowym rozwiązaniem w tej sytuacji. To, że otrzymujesz 0 wynika pewnie z tego, że wywołujesz tą funkcję przed dodaniem rekordu do bazy, a powinieneś po.


I tutaj także dziękuję. Przetestowałem i działa elegancko.
Wielki + dla Ciebie.

Pozdrawiam
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.