Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Ostatnie ID z tabeli
wbeatn
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


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 ?
Go to the top of the page
+Quote Post
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


  1. $cid= mysql_fetch_array(mysql_query("SELECT USER_ID FROM gzdjecia ORDER BY USER_ID DESC LIMIT 1"));
  2. echo $cid['USER_ID'];
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Jeśli nadajesz nazwę plikowi zaraz po wykonaniu INSERTa do bazy to najlepszym wyjściem będzie mysql_insert_id
Go to the top of the page
+Quote Post
wbeatn
post
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


gitbejbe dziękuję (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
gitbejbe
post
Post #6





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


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ę
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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ę.
Go to the top of the page
+Quote Post
wbeatn
post
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

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


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

Ten post edytował wbeatn 22.08.2013, 18:33:37
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: 3.10.2025 - 02:15