Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql]przydzielanie ID
propheti
post
Post #1





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

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


Witam,
zna ktoś może sposób na to, aby przy dodawaniu nowego rekordu (powiedzmy, przy rejestracji), skrypt wyszukiwał "dziury" w rekordach, i wstawiał je właśnie w te miejsca.

Powiedzmy że mam coś takiego:

usera - id 1
userb - id 2
userd - id 4

Chce aby po rejestracji użytkownik posiadał id 3.

Dobrze by było, aby uzupełniało dopiero od danej wartości. Powiedzmy że od id 50, wszystkie wcześniejsze będą ignorowane.


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A po co chcesz to robić?
Przecież to bez sensu.
Go to the top of the page
+Quote Post
propheti
post
Post #3





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

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


Otóż właśnie nie!

Mam zamiar wykorzystać to w grze, która opiera się na id, i wszelkie akcje wykonywane w niej jak naprzykład przekazanie złota bądź danego przedmiotu, wymaga podania id, a po kilku miesiącach rejestracji userów id są rzędu 6000-7000, co źle wpływa na wygode samej gry.


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Cytat
a po kilku miesiącach rejestracji userów id są rzędu 6000-7000, co źle wpływa na wygode samej gry
a w jaki sposob to źle wplywa? Wybacz, ale nie rozumiem. Dziury w numeracji w kazdej aplikacji nie powinny miec zadnego zlego wplywu


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

"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
propheti
post
Post #5





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

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


Bo zamiast wpisywania trzech cyferek przy przelewaniu kasy, wpisuje 6-7. Kolejna rzecz, to że ludzie z reguły wolą mieć mniejsze id, ze względu na fakt, że im mniejsze tym wyżej są na liście obecnych.


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
Mar3k
post
Post #6





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.12.2003
Skąd: Allenstein

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


Może dodatkowe pole w bazie i nadanie im numerow od 1 do ilosci userow ?
Zniknie problem ale przybedzie pole .


--------------------
pozdrawiam
Go to the top of the page
+Quote Post
AxZx
post
Post #7





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(propheti @ 27.09.2006, 13:17:30 ) *
Bo zamiast wpisywania trzech cyferek przy przelewaniu kasy, wpisuje 6-7. Kolejna rzecz, to że ludzie z reguły wolą mieć mniejsze id, ze względu na fakt, że im mniejsze tym wyżej są na liście obecnych.


chcesz powiedziec ze jezeli ktos nowy sie zapisze i zalozmy bedzie mial to mniejsze ID bo trafi mu sie dziura (np ID 29 sie zwolni) to bedzie wyzej w hierarchi?
o masz zly sposob hierarchizowania;)
a pozatym niech gracz nie bedzie numerkiem, tylko zeby mial swoj login i jak chcesz dac mu mozliwosc robienia przelewu totak zeby nie musial pamuietac jaki to byl login, albo jakie to bylo ID tylko zrob mu liste userow niech sobie znajdzie i kliknie.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
propheti
post
Post #8





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

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


Eh, chyba jasno powiedziałem czego potrzebuje prawda? smile.gif Gdybym mógł brać pod uwage inne rozwiązania, to pewnie bym się tak nie męczył.

Zależy mi na skrypcie który sprawdzi tabele w poszukiwaniu "dziur" i przy dodawaniu nowego wiersza, najnormalniej załata nim jedną z tych luk.

Moge liczyć na pomoc?

A propo, AxZx - sprawdź sam, dlaczego nie moge zrobić inaczej - http://abbil.cal.pl

Ten post edytował propheti 27.09.2006, 18:05:17


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
nexis
post
Post #9





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Są dwa sposoby:

1) Podczas usuwania konto (czyli zwolnieniu się ID) dopisujesz to ID do specjalnej tabeli, z której podczas rejestracji jest ewentualnie brane ID, a jeśli tabela jest pusta to użytkownik dostaje po prostu MAX(id)

2) Robisz pęltę i sprawdzasz po kolei czy dane id jest zajęte

  1. <?php
  2. $i = 1;
  3. $query = 'SELECT id FROM users ORDER BY id ASC';
  4. $query = mysql_query( $query );
  5. while (($row = mysql_fetch_array( $query )) && (!isset( $userid ))) {
  6. if ($row['id'] != $i) {
  7. $userid = $row['id'];
  8. }
  9. $i++;
  10. }
  11. echo $userid;
  12. ?>


Ten post edytował nexis 27.09.2006, 18:51:44


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
sticker
post
Post #10





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


jak tak będziesz łatać dziurki a używasz mysql bez transakcji to może Cie spotkać bardzo przykra niespodzianka i w bazie zrobi Ci sie niezły bałagan chyba że dobrze to kontrolujesz.
A co do skryptu który będzie to sprawdzał to po prostu przelatuj kolejne cyferki z tabelki od 1 w góre i szukaj pierwszej wolnej.


--------------------
Go to the top of the page
+Quote Post
propheti
post
Post #11





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

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


Huh, no i pojawił się problem. sad.gif

Kod
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/prophet/domains/abbil.cal.pl/public_html/test.php on line 8


linia 8 to:

Kod
while (($row = mysql_fetch_array( $query )) && (!isset( $userid ))) {


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
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%)
-----


Kiedys pisalem na forum jak za pomoca 1 zapytania zwrocic najmniejszy wolny numer. Wystarczy poszukac jak Cie to tak bardzo interesuje. Jesli nie znajdziesz to pisz to powtorze to jeszcze raz.


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





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

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


Ja na szczęście należe do nielicznej grupy osób, które potrafią korzystać z wyszukiwarek. Jednak znalezienie tego jednego posta wśród tysięcy tematów jest niczym poszukiwanie igły w stogu siana, a ja już i tak spędziłem sporo czasu na poszukiwaniu odpowiedzi na nurtujące mnie pytanie.

Więc byłbym wyjątkowo wdzięczny jeśli mógłyś powtórzyć.


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
SongoQ
post
Post #14





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 wiec najprosciej jest zrobic cos takiego.

Mamy tabele tabela

pole id
1
2
4
5
7
10

Najmniejszym wolny id jest 3

  1. SELECT t1.id + 1
  2. FROM tabela t1 LEFT JOIN tabela t2 ON t1.id = t2.id + 1
  3. WHERE t2.id IS NULL
  4. LIMIT 1


Problem jest jesli nie ma pierwszego id czyli 1. Mam nadzieje ze CI to jakos zobrazowalo jak wyciagnac najmniejsze wolne id.


--------------------
Go to the top of the page
+Quote Post
propheti
post
Post #15





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

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


Niestety, ale powyższe zapytanie nie działa, zawsze przy wykonywaniu wywala wynik 2.
Możliwe że robie coś źle...
Ehh, już mnie zaczyna głowa od tego boleć. sadsmiley02.gif


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
Go to the top of the page
+Quote Post
SongoQ
post
Post #16





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%)
-----


Podaj strukture i kilka przykladowych danych i zapytanie jakie wykonujesz.


--------------------
Go to the top of the page
+Quote Post
propheti
post
Post #17





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

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


Struktura tabeli players:
id | user | pass | rank | ...
-----
1 | jurek | (md5) | admin | ...
2 | czesuaf | (md5) | member | ...
4 | wacuaf | (md5) | staff | ...

A oto zapytanie:
  1. SELECT t1.id + 1
  2. FROM players t1 LEFT JOIN players t2 ON t1.id = t2.id + 1
  3. WHERE t2.id IS NULL
  4. LIMIT 1


--------------------
Bądźmy realistami, żądajmy tego, co niemożliwe.
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: 21.08.2025 - 18:40