Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak wybrac ostatni dodany id ?
swmikolaj21
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 11.05.2005

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


Witam!

Jak najskuteczniej i najpoprawniej zrobic cos takiego:

Komis:
dodaje oferte- do bazy danych: marka, model, id- auto increment. Oprocz tego uploaduje zdjecie ktorego nazwa ma wygladac cos w stylu car_11.jpg , gdzie 11 to nr id wlasnie co dodanego auta.

Problem mam z tym jak wycignac to id

Pozdrawiam
Go to the top of the page
+Quote Post
mhs
post
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


np.:

1)
  1. SELECT last_insert_id();

2) mysql_insert_id" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
swmikolaj21
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 11.05.2005

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


biggrin.gif A tak sobie własnie myslałem ze przydałaby sie taka funkcja. Ale nie pomyslalem ze ja stworzyli.

DZIEKI WIELKIE!!!
Go to the top of the page
+Quote Post
kotkon
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 15.04.2004
Skąd: Poznań

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


2. nie działą bo ty tylko w php 5

a co do 1. to nie rozumiem jak to trzeba zrobic zeby działało mozna by prosic o kod w php jak to użyc?questionmark.gif


--------------------
-------------
Gustaw
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


php5 nie ma nic do tego.

Cytat
to nie rozumiem jak to trzeba zrobic zeby działało mozna by prosic o kod w php jak to użyc?questionmark.gif

W manualu wszystko pisze, nawet masz przyklad.


--------------------
Go to the top of the page
+Quote Post
arturrrr
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 10.07.2005

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


Jak nie bedzie dzialac to zawsze mozna sprawdzic ilosc rekordow w bazie, odjac od niej jeden i z LIMITem wyciagnac jeden rekord.
Go to the top of the page
+Quote Post
SongoQ
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@arturrrr Zastanawiales sie o czym powiedziales? Dodajesz 10 rekordow czyli inkrementacja wynosi 11, nastepnie usuwasz 5 czyli zostaje Ci 5, robisz zapytanie zwraca Ci 5 lecz ostatnie id bylo 10. Dodatkowo uwzglednij ze miedzy dodaniem a zwroceniem tego id ktos dodal kolejny rekord.

To co napisales jest najgorszym bledem.


--------------------
Go to the top of the page
+Quote Post
arturrrr
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 10.07.2005

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


@SongoQ chyba mnie zle zrozumiales.

1. Sprawdzam ile jest rekordow w bazie.
2. Odejmuje od tego 1.
3. Pobieram jeden rekord, np. warunek id > 0 ale (exclamation.gif!) LIMIT jest ustawiony na jedno pobranie rekordu od miejsca wyliczonego w punkcie 2.

To by bylo na tyle w sprawie wytlumaczenia o co mi chodzi.

Druga sprawa to to ze miedzy punktem 1 a 3 (zapewniam ze ulamkowa czesc sekundy) moze dojsc do:

- dodania rekordu. Ja uznalem ze jest to malo prawdopodobne. Jesli nawet tak by sie stalo, to dostaniemy przedostatni rekord.
- usuniecia jakiegos rekordu. Takze malo prawdopodobne. Wtedy nic nie zostanie z bazy zwrocone.

Dodam ze mozna to wrzucic w petle i w koncu otrzymamy prawidlowy wynik. Obstawiam ze bedzie to za pierwszym razem.

Nie jest to sposob najefektywniejszy, ale za to logiczny i latwy do przeanalizowania. Przynajmniej dla mnie.

@SongoQ jesli sie myle to mnie popraw. Moze sie czegos naucze, bo specem nie jestem...
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Ok to moze inaczej.

Dodales rekord i id jego wynosi 10 i mamy takie rekordy
id tekst
1 aaa
3 bbb
5 sdf
6 sdf
7 dsf
10 dodany

Zgodnie z tym co napisales.

1 i 2.
  1. SELECT (COUNT(id) - 1) AS ilosc
  2. FROM tabela

Zwraca 5

3.
  1. SELECT *
  2. FROM tabela WHERE id > 0 LIMIT 5, 1

Jesli zwroci pseudolosowo to bedzie kazda wartosc moze byc 10, moze byc 1 i po co to id > 0 questionmark.gif?

Cytat
- dodania rekordu. Ja uznalem ze jest to malo prawdopodobne. Jesli nawet tak by sie stalo, to dostaniemy przedostatni rekord.

Czesto sie to zdaza, przykladem moze byc nawet forum.php.pl

Podsumowujac, takie cos by zadzialalo jak bys jeszcze sortowanie wprowadzil, ale co za tym idzie, dodatkowy czas dla bazy przez takie rzeczy jak COUNT w pierwszym zapytaniu w ORDER BY w 2 zapytaniu i LIMIT. Dodatkowo nie uwgledniles ze sesje sie moga zachodzic.

Nie ma niczego pewniejszego jak zwrocenie id z inkrementacji z sesji bazy danych.


--------------------
Go to the top of the page
+Quote Post
arturrrr
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 10.07.2005

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


No to sie chyba nie rozumiemy sad.gif

TABELKA:

id adres
1 hhdsgh
2 gss
3 gh
7 hksp
8 csgh


Kod
$zapytanie = "SELECT * FROM tabela where id > 0";
$rekordy = mysql_num_rows($wykonaj);


I tu juz masz liczbe rekordow.

Kod
$rekordy--;


Tu wszystko jasne.

Kod
$zapytanie = "SELECT * FROM tabela where id > 0 LIMIT ".$rekordy.",1";


A tu dostajesz ostatni rekord.

Co do tabeli to id jest oczywiscie dodawane automatycznie, rosnaco i sie nigdy nie powtarza.


Nadal uwazam ze jest to dobre rozwiazanie, ale dla MALYCH serwisow. Moga byc bowiem czeste dodawania danych itp, wiec istnieje prawdopodobienstwo malych przeklaman.

Cytat
Jesli zwroci pseudolosowo to bedzie kazda wartosc moze byc 10, moze byc 1 i po co to id > 0 questionmark.gif?

Tutaj Ciebie nie rozumiem:(

Cytat
Czesto sie to zdaza, przykladem moze byc nawet forum.php.pl

a tu sie zgadzam, forum w koncu to nie jakis maly serwis.

Cytat
Nie ma niczego pewniejszego jak zwrocenie id z inkrementacji z sesji bazy danych.

tu tez sie moge zgodzic.
Go to the top of the page
+Quote Post
mhs
post
Post #11





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


@arturrrr

tak czytam ten watek i nie rozumiem jednej rzeczy:

po co tyle kombinowania, skoro:


Cytat
Nadal uwazam ze jest to dobre rozwiazanie, ale dla MALYCH serwisow. Moga byc bowiem czeste dodawania danych itp, wiec istnieje prawdopodobienstwo malych przeklaman.
questionmark.gif

czyli Twoje rozumowanie jest bledne... nie ma znaczenia czy jest to duzy czy maly serwis jezeli istnieje mozliwosc przeklamania
Go to the top of the page
+Quote Post
SongoQ
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Po co tyle zapytan, po co meczyc php i baze danych.

To zapytnanie:
  1. $zapytanie = "SELECT *
  2. FROM tabela where id > 0";
  3. $rekordy = mysql_num_rows($wykonaj);

Zdajesz sprawe czym to grozi?? Bedzie milony rekordow w bazie do bedziesz musial wszysto do php przeslac po co to wszystko zwracac, pomysl troche.

Cytat
Tutaj Ciebie nie rozumiem:(


Rekordy z bazy danych jesli nie masz sortowania to sa zwracane pseudolosowo lub w przypadku MySQLa domyslenie wedlug daty, jesli skompikujesz zapytnie wtedy juz data nie wchodzi w gre.

Idac Twoim tokiem myslenia to juz lepiej takie cos zastosowac
  1. SELECT max(id) AS id FORM tabela


Slyszales o max?questionmark.gif Widze ze brakuje Ci duzo teorii baz danych.


--------------------
Go to the top of the page
+Quote Post
arturrrr
post
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 10.07.2005

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


Cytat
Nie jest to sposob najefektywniejszy, ale za to logiczny i latwy do przeanalizowania. Przynajmniej dla mnie.


Fragment mojego postu. A co do:
Cytat
Slyszales o max?questionmark.gif Widze ze brakuje Ci duzo teorii baz danych.


Oczywiscie ze slyszalem i oczywiscie ze brakuje mi duzo wiedzy.
Rozumiem ze jestes w tych sprawach lepszy i nie zamierzam tego podwazac, ale moze troch skromnosci z twojej strony by sie tez przydalo. Wyskakujesz tez z jakimis milionami a ja juz kilka razy napisalem ze to rozwiazanie dla tych co nie potrafia inaczej tego zrobic, dla malych stron. Widze jednak ze ty chyba sie z wiedza na temat baz danych urodziles. Moze wiec zajmij sie jakas dochodowa praca a nie bezczynnie siedzisz na forum. W koncu specjalisci zbieraja miliony...
To dotyczy takze wypowiedzi w moim temacie.

To juz wszytsko z mojej strony na ten temat.

Pozdro
Go to the top of the page
+Quote Post
mhs
post
Post #14





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Cytat(arturrrr @ 2005-07-11 13:13:12)
Rozumiem ze jestes w tych sprawach lepszy i nie zamierzam tego podwazac, ale moze troch skromnosci z twojej strony by sie tez przydalo. Wyskakujesz tez z jakimis milionami a ja juz kilka razy napisalem ze to rozwiazanie dla tych co nie potrafia inaczej tego zrobic, dla malych stron. Widze jednak ze ty chyba sie z wiedza na temat baz danych urodziles. Moze wiec zajmij sie jakas dochodowa praca a nie bezczynnie siedzisz na forum. W koncu specjalisci zbieraja miliony...
To dotyczy takze wypowiedzi w moim temacie.

To juz wszytsko z mojej strony na ten temat.

Pozdro

uszanuj wiec czas, ktory poswieca SongoQ starając Ci się pomóc i nie wypowiadaj sie w ten sposob....
Go to the top of the page
+Quote Post
SongoQ
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
ale moze troch skromnosci z twojej strony by sie tez przydalo

Tu nie chodzi o skromnosc, tu chodzi o oczywiste rzeczy, jak bys troszeczke pomyslal i sie zastanowil to bys znalazl latwiejsze, krotsze rozwiazanie a nie kobmbinujesz z zapytaniami.

Cytat
Wyskakujesz tez z jakimis milionami a ja juz kilka razy napisalem ze to rozwiazanie dla tych co nie potrafia inaczej tego zrobic, dla malych stron.

Kazdy nawet poczatkujacy programista szuka najprostrzego rozwiazania a nie komplikuje sobie zycie i jeszcze przekonuje sie ze jego pomysl jest najlepszy. Poczytaj o wydajnosciach baz danych, poczytaj o SCRUM zobaczysz ze najwazniejsza jest prostota wykonania dla GUI jak i dla mechanizmow dzialania, jak i dla bazy danych.

Cytat
Widze jednak ze ty chyba sie z wiedza na temat baz danych urodziles.

Oj mylisz sie, duzo mi brakuje wiedzy na ten temat i ciagle sie ucze, a szczegolnie spedzajac czas na tym forum i jesli popelnie jakas gafe to potrafie sie przyznac.

Cytat
Moze wiec zajmij sie jakas dochodowa praca a nie bezczynnie siedzisz na forum.

Mam prace i jestem z niej zadowolony, a dlaczego siedze na forum? Podobnie jak wiekszosc osob tutaj wypowiadajacy sie: przez wypowiadanie sie i pomaganie innym sami sie uczymy i naprawde wiele wiedzy nabylem spedzajac czas na tym forym.

Wracajac do powyzszych postow podalem Ci przyklady, mysle ze kazdy zrozumial, jesli chesz to moge podac Ci rezultaty czasowe dla roznych wielkosci rekordow i jestem w stanie udowodnic Ci ze Twoje motody sa nieoptymalne.


--------------------
Go to the top of the page
+Quote Post
DavidPL
post
Post #16





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 27.04.2004
Skąd: Rzeszów

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


@arturrrr

Ucz się, a będziesz specjalistą i będziesz zarabiał miliony - a na razie uszanuj mądrzejszych którzy chcą Ci pomóc i podzielić się z Tobą swoją wiedzą, która zresztą też kosztowała ich sporo wysiłku.

@SongoQ

Z co byś powiedział na zapytanie:
  1. SELECT id
  2. FROM tabela ORDER BY id DESC LIMIT 0, 1


Kwestia wydajnościowa, bo wydaje mi się że rezultat powinien być taki sam jak MAX


--------------------
Pozdrawiam,
Dawid
Go to the top of the page
+Quote Post
mhs
post
Post #17





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Cytat(DavidPL @ 2005-07-11 14:19:14)
Kwestia wydajnościowa, bo wydaje mi się że rezultat powinien być taki sam jak MAX

gdzies swego czasu przeczytalem, ze zapytania z funkcjami agregujacymi sa niezwykle szybkie (jak nie najszybsze), tym bardziej, ze w tym przypadku sa to pola indeksowane w zwiazku

wydaje mi sie ze w tym przypadku beda one dzialac szybkiej gdyz tutaj system zarz. baza danych musi pobrac wszystkie rekordy, dokonac posortowania i nastepnie dopiero zwrocic ten jeden wiersz

takie jest moje zdanie... czekam na opinie...
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@arturrrr oj nie popisałeś się chłopie. Ludzie chcą pomóc a ty na nich krzyczysz jak ci uwagę zwrócą. Przyczepiłeś się tej małej stronki jak rzep psiego ogona. Czy to duża, czy to mała - optymalnie trzeba pisać dla każdej. W ten sposób se nawyki dobre wyrabia i podnosi swój poziom. Tak więc nie mów ludziom czym mają się zająć i sam przyjmi z pokorą i wdzięcznością lepsze rozwiązania.

co do tematu: max będzię lepszy również i moim "skromnym" zdaniem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
grattz
post
Post #19





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 29.10.2006
Skąd: BB

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


Cytat(SongoQ @ 8.07.2005, 18:27:46 ) *
W manualu wszystko pisze, nawet masz przyklad.

Dopiero zaczynam bawic sie php. Szukam tej funkcji select last_insert_id();
Ale nie widze tego tematu.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




select last_insert_id() to jest MySql a nie php, wiec nic dziwnego ze w manualu php tego nie znalazles smile.gif

W php masz:
http://pl.php.net/mysql_insert_id


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 10:42