Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 15.06.2007 Ostrzeżenie: (0%)
|
Witam.
Jestem na tym forum nowa i przejdę do sedna sprawy... Otóż jest Mi potrzebne funkcja która Mi pobierze pierwszy WOLNY numer rekordu z pola typu auto_increment. I w zasadzie to chyba znalazłam co Mnie potrzeba -> http://algorytmy.pl/?id=1064&pp=503 Ale jest małe ale: UWAGA! To tylko fragment strony! Całą zobaczysz po opłaceniu abonamentu! (IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif) A trochę dużo tam wołają za SMS'a zaś karty nie posiadam... Może ktoś zna inne miejsce gdzie to znajdę albo Sam też wie jak takie coś napisać bo jest Mi bardzo potrzebne. EDIT: Pracuję na php 4/5 oraz mysql 4.1.21-standard Pozdrawiam i czekam na pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Ania-678 15.06.2007, 10:31:00 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%)
|
Cytat("UDAT") Jedyne rozwiązanie, które działa jest przedstawione w moim poście, gdyż jeśli nie ma najmniejszej wartości to ją zwraca, jeśli nie to zwraca ID+1, którego nie ma w tabeli, sprawdzane dla każdego ID już istniejącego. A mógłbyś podać przykładowe wartości, dla których twoje zapytanie działa? Bo jak bym tego nie testował, to zawsze zwraca mi: 0. Nawet dla danych: Kod 0 1 2 3 5 6 Jeśli używa się MySQL5 to najprostszym wyjściem będzie napisanie prostej funkcji: Kod DROP FUNCTION IF EXISTS pierwsze_puste_id; (zakładamy że id ma być dodatnie)DELIMITER $ CREATE FUNCTION pierwsze_puste_id() RETURNS INT BEGIN SET @ID = 1; SET @MAX_ID = ( SELECT MAX(id) FROM tabela ); WHILE( @ID <= @MAX_ID ) DO IF NOT EXISTS ( SELECT id FROM tabela WHERE ( id = @ID ) ) THEN RETURN( @ID ); END IF; SET @ID = @ID + 1; END WHILE; RETURN( @ID ); END$ DELIMITER; No chyba, że jest w MySQL'u odpowiednik: range" title="Zobacz w manualu PHP" target="_manual - to wtedy wystarczyłoby zwykłe podzapytanie. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%)
|
A mógłbyś podać przykładowe wartości, dla których twoje zapytanie działa? Bo jak bym tego nie testował, to zawsze zwraca mi: 0. Nawet dla danych: Kod 0 1 2 3 5 6 Zero zwraca tylko gdy nie ma pola o ID = 0, inaczej zwraca pierwsze nie istniejące, o jeden większe od już wpisanego. A co do twojego przykładu, to zobacz co mi MySQL zwrócił: Kod mysql> SELECT * FROM tabela; +----+ | ID | +----+ | 0 | | 1 | | 2 | | 3 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec) mysql> SELECT IF( -> NOT EXISTS ( -> SELECT id FROM tabela WHERE id=0 -> ), -> 0, -> ( SELECT t1.id+1 FROM tabela t1 -> WHERE NOT EXISTS ( -> SELECT id FROM tabela WHERE id=t1.id+1 -> ) ORDER BY t1.id LIMIT 1 -> ) -> ) as empty; +-------+ | empty | +-------+ | 4 | +-------+ 1 row in set (0.00 sec) Masz pomysł dlaczego u mnie działa, a u Ciebie nie? Jeśli chcesz numerację od 1 to zmień w 3. i 5. linii 0 na 1 Ten post edytował UDAT 17.06.2007, 09:49:59 |
|
|
|
Ania-678 Pobranie 1 wolnego id z pola typu auto_increment 15.06.2007, 10:28:35
Cienki1980 Jeżeli potrzebujesz następnego id z pola auto_incr... 15.06.2007, 11:19:28
sticker pierwszy wolny to znaczy ten który bedzie wstawio... 15.06.2007, 11:20:47 
skowron-line Cytat(sticker @ 15.06.2007, 10:20:47 ... 15.06.2007, 11:59:50
SongoQ Cytatmozesz np pobrac max(id) a potem w petli spra... 15.06.2007, 13:08:53 
skowron-line Cytat(SongoQ @ 15.06.2007, 12:08:53 )... 15.06.2007, 13:17:40
Ania-678 Więc tak...
Nie chodzi Mnie o zmianę au... 15.06.2007, 13:34:53
SongoQ aaaaa
@skowron-line Zle sobie odczytalem chodzilo ... 15.06.2007, 13:37:15 
Ania-678 Cytat(SongoQ @ 15.06.2007, 14:37:15 )... 15.06.2007, 16:08:53
kwiateusz źle rozumiesz to jest jedna tabela ł... 15.06.2007, 16:19:11
Ania-678 To nie wiem czy dobrze podstawiam Swą nazw... 15.06.2007, 16:26:47
superfrajer Niezbyt dobrze kombinujesz
Dodaj do tabeli userow... 15.06.2007, 21:08:10
Norbas @superfrajer Jaki jest związek tego co napisa... 15.06.2007, 22:44:55
Ania-678 No wynik jest pusty...
Ale... ja to potrzebuję do... 15.06.2007, 23:38:08
SongoQ Myslalem ze po moim poscie poradzisz sobie.
Masz ... 16.06.2007, 08:08:13
Ania-678 Ten dziad:
[SQL] pobierz, plaintext $aktiv = $db ... 16.06.2007, 09:20:54
UDAT Spróbuj
[SQL] pobierz, plaintext SELECT t1.id+1 F... 16.06.2007, 09:52:18
Ania-678 Ni jedno, ni drugie egzaminu nie zdaje... 16.06.2007, 10:42:02
superfrajer Norbas: taki jest zwiazek, ze dziewczyna troche be... 16.06.2007, 12:15:59
UDAT A to:
[SQL] pobierz, plaintext SELECT IF( ... 16.06.2007, 12:47:20
Ania-678 Po wywołaniu zapytania w PMA "sprzedał" ... 16.06.2007, 13:58:29
SongoQ 2 razy odpowiedzialem na to pytanie. Problem jest ... 16.06.2007, 16:26:28 
UDAT Cytat(SongoQ @ 16.06.2007, 17:26:28 )... 16.06.2007, 16:55:56
Kicok To zadanie nie jest takie proste, jakie się wydaje... 16.06.2007, 17:33:55 
UDAT Cytat(Kicok @ 16.06.2007, 18:33:55 ) ... 16.06.2007, 18:57:07
Ania-678 Już mam, znalazłam człowieka który miał konto na t... 16.06.2007, 21:57:18
Kicok CytatMasz pomysł dlaczego u mnie działa, a u Ciebi... 17.06.2007, 10:32:19
eai CytatJuż mam, znalazłam człowieka który miał konto... 20.06.2007, 14:44:00
UDAT Poprawiona wersja:
Kodmysql> SELECT IF(
-... 20.06.2007, 16:12:21
eai mysql> SELECT IF(min(id)<1,
-> 1,... 20.06.2007, 16:22:18 ![]() ![]() |
|
Aktualny czas: 25.12.2025 - 16:49 |