ďťż
 
Pierwsze wolne w tablicy ďťż
 
Pierwsze wolne w tablicy
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Pierwsze wolne w tablicy



Grzegorz Skaruz - 16-05-2006 00:15
Pierwsze wolne w tablicy
 
Witam

Załóżmy że mam tablicę (w bazie MySQL) zawierajacą elementy:
1, 2, 3, 6, 17, 19, 28, 29, 30

W jaki sposób najprościej znaleźć pierwszą wolną "lukę", czyli w tym
przypadku będzie to liczba 4. Oczywiście można lecieć for'em w PHP,
ale to mało wydajne rozwiązanie - może być jako ostateczność.

Chyba że istnieje jakaś tego typu funkcja w MySQLu, wtedy liczby to
pole ID (nie autonumer).

Na pl.comp.lang.php padła propozycja

SELECT b.id FROM tabela a
LEFT JOIN tabela b ON a.id=b.id+1
WHERE b.id IS NULL
ORDER BY b.id LIMIT 1

ale niestety zwraca tylko NULL
--
Grzegorz Skaruz
http://www.skaruz.com - prywatnie
http://www.verdox.pl - firmowo
http://www.mopsik.pl - pomocny w krzyżówce i w scrabble
http://www.mydlandia.pl - sklep z kosmetykami naturalnymi
http://www.almand.pl - biuro tłumaczeń





LECH DUBROWSKI - 16-05-2006 00:15

  > SELECT b.id FROM tabela a
> LEFT JOIN tabela b ON a.id=b.id+1
> WHERE b.id IS NULL
> ORDER BY b.id LIMIT 1

To powinno byc dobre

SELECT b.id FROM b
LEFT JOIN a ON a.id=b.id+1
WHERE b.id IS NULL
ORDER BY b.id LIMIT 1

Leszek

> Grzegorz Skaruz




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 16-05-2006 00:15

  LECH DUBROWSKI wrote:
>
> SELECT b.id
> WHERE b.id IS NULL

Jesteś pewny, że tak to miało wyglądać? :)

--
P.M.




hubert depesz lubaczewski - 16-05-2006 00:15

  Grzegorz Skaruz wrote:
> SELECT b.id FROM tabela a

select a.id + 1 FROM tabela a

> LEFT JOIN tabela b ON a.id=b.id+1
> WHERE b.id IS NULL
> ORDER BY b.id LIMIT 1

order by a.id limit 1

> ale niestety zwraca tylko NULL

po tych 2 modyfikacjach powinno byc ok.
ale mam jedno "ale". czemu uwazasz, ze potrzebujesz zapelniac dziury?

depesz

--
http://www.depesz.com/ - nowy, lepszy depesz





Grzegorz Skaruz - 16-05-2006 00:15

  Pięknego dnia Mon, 15 May 2006 10:53:15 +0200 hubert depesz
lubaczewski <depesz@depesz.com> napisał:

Dzięki, działa dokładnie tak jak powinno.

>ale mam jedno "ale". czemu uwazasz, ze potrzebujesz zapelniac dziury?

Sprawa wygląda tak: baza książek gdzie numer ISBN jest
identyfikatorem. Każda książka ma unikalny ISBN, chyba... że jest to
książka ponad 35 letnia - wtedy nie ma numeru ISBN, a takie też trzeba
dodać do bazy. Padł pomysł aby książki bez prawdziwych numerów ISBN
miały zastępcze ISBNy liczące od 0.
--
Grzegorz Skaruz
http://www.skaruz.com - prywatnie
http://www.verdox.pl - firmowo
http://www.mopsik.pl - pomocny w krzyżówce i w scrabble
http://www.mydlandia.pl - sklep z kosmetykami naturalnymi
http://www.almand.pl - biuro tłumaczeń




Grzegorz Skaruz - 16-05-2006 00:15

  Pięknego dnia Mon, 15 May 2006 10:53:15 +0200 hubert depesz
lubaczewski <depesz@depesz.com> napisał:

>po tych 2 modyfikacjach powinno byc ok.

Pospieszyłem się nieco.
1 przypadek - tabela zawiera 17,18, 19 - powinno znaleźć 0 lub 1,
znajduje
2 przypadek - tabela zawiera 0, 1, 2, 3 , 17 - znajduje 1, powinno 4
3 przypadek - tabela zawiera 0, 1, 3, 19 - znajduje 1, powinno 2
--
Grzegorz Skaruz
http://www.skaruz.com - prywatnie
http://www.verdox.pl - firmowo
http://www.mopsik.pl - pomocny w krzyżówce i w scrabble
http://www.mydlandia.pl - sklep z kosmetykami naturalnymi
http://www.almand.pl - biuro tłumaczeń




=?iso-8859-2?Q?Krzysztof_Jod=B3owski?= - 16-05-2006 00:15

  > Sprawa wygląda tak: baza książek gdzie numer ISBN jest
> identyfikatorem. Każda książka ma unikalny ISBN, chyba... że jest to
> książka ponad 35 letnia - wtedy nie ma numeru ISBN, a takie też trzeba
> dodać do bazy. Padł pomysł aby książki bez prawdziwych numerów ISBN
> miały zastępcze ISBNy liczące od 0.

To raczej zły pomysł z tymi numerami od 0 (pod względem formalnym a nie
bazodanowym).
A pod względem bazodanowym z tym ISBN jako identyfikatorem też nie
najlepszy pomysł - niektóre książki (różne) są czasem wydawane pod jednym
ISBNem. Na 90 tysięcy tytułów w bazie mamy takich ok. 2300.
Nie lepiej będzie założyć oddzielny klucz auto_increment, a ISBN trzymać
jako pole dodatkowe?

--
pozdrawiam
Krzysztof Jodłowski
http://www.wysylkowo.pl




Grzegorz Skaruz - 16-05-2006 00:15

  Pięknego dnia Mon, 15 May 2006 11:33:50 +0000 (UTC) Krzysztof
Jodłowski <bluelaser@poczta.onet.pl> napisał:

>To raczej zły pomysł z tymi numerami od 0 (pod względem formalnym a nie
>bazodanowym).
>A pod względem bazodanowym z tym ISBN jako identyfikatorem też nie
>najlepszy pomysł - niektóre książki (różne) są czasem wydawane pod jednym
>ISBNem. Na 90 tysięcy tytułów w bazie mamy takich ok. 2300.
>Nie lepiej będzie założyć oddzielny klucz auto_increment, a ISBN trzymać
>jako pole dodatkowe?

NIe zajmowałem się tym projektem od jego początku, a jedynie go
przejąłem i na zlecenie dodaję nową funkcjonalność.
Przekażę sugestię właścicielowi. Problem w tym że z serwisu korzystają
już użytkownicy więc zmiana takiego mechanizmu pociągałaby za sobą
spore przestoje i wiele testów.
--
Grzegorz Skaruz
http://www.skaruz.com - prywatnie
http://www.verdox.pl - firmowo
http://www.mopsik.pl - pomocny w krzyżówce i w scrabble
http://www.mydlandia.pl - sklep z kosmetykami naturalnymi
http://www.almand.pl - biuro tłumaczeń




hubert depesz lubaczewski - 17-05-2006 00:40

  Grzegorz Skaruz wrote:
> Pospieszyłem się nieco.
> 1 przypadek - tabela zawiera 17,18, 19 - powinno znaleźć 0 lub 1,
> znajduje

w skrocie - zapomnij. w postgresie nowym sie da. jak zrobisz dodatkowa
tablice z liczbami naturalnymi - da sie. ale samo z siebie sie nie da.

> 2 przypadek - tabela zawiera 0, 1, 2, 3 , 17 - znajduje 1, powinno 4
> 3 przypadek - tabela zawiera 0, 1, 3, 19 - znajduje 1, powinno 2

fix:
select a.id + 1 FROM tabela a
LEFT JOIN tabela b ON a.id + 1 =b.id
WHERE b.id IS NULL
order by a.id limit 1
;

depesz

--
http://www.depesz.com/ - nowy, lepszy depesz
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= =?ISO-8859-2?Q?=5BOracle=5D_Porownanie_wierszy_z_tych_?==?ISO-8859-2?Q?samych_tablic_na_2_r=F3=BFnych_schematach?= [MySQL] Jak wybrac wiele elementow powiazanych z jednym elementem innej tablicy? [oracle] =?ISO-8859-2?Q?=A3=B1czenie_dw=F3ch_tablic_=3F?= [MS SQL 2005 EXPRESS] Uprawnienia do pól w tablicy [VBA] Dynamiczne tworzenie tablic w bazie MSAccess Zapytanie SQL, wyszukiwanie strony tablicy [oracle] Funkcja zwracajaca typ tablicowy Dynamiczna tablica w SQL Server 2000 Jak dodać tablicę z PHP do tabeli MySQL
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • misida.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com