ďťż
 
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] ďťż
 
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
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

Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]



MJ - 25-11-2006 00:06
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
  Witam.

Walczę z następującym problemem:

Jest sobie baza zawierająca prefixy telefoniczne w postaci
template1=# select * from ct;
id | prefix | price
----+--------+-------
3 | 012 | 0.5
4 | 0124 | 0.1
(2 rows)

template1=#

Jak zadać zapytanie mając pełen numer (np 012476486) aby dostać
najbardziej precyzyjne dopasowanie w tabeli ( w tym wypadku 0124) ?

Nie jestem guru w PostgreSQL i jakoś nic mi nie wychodzi ...

Pozdrawiam grupowiczów.





MJ - 25-11-2006 00:06

  MJ napisał(a):
> Witam.
>
> Walczę z następującym problemem:
>
> Jest sobie baza zawierająca prefixy telefoniczne w postaci
> template1=# select * from ct;
> id | prefix | price
> ----+--------+-------
> 3 | 012 | 0.5
> 4 | 0124 | 0.1
> (2 rows)
>
> template1=#
>
> Jak zadać zapytanie mając pełen numer (np 012476486) aby dostać
> najbardziej precyzyjne dopasowanie w tabeli ( w tym wypadku 0124) ?
>
> Nie jestem guru w PostgreSQL i jakoś nic mi nie wychodzi ...
>
> Pozdrawiam grupowiczów.

Poradziłem sobie :):
template1=# select * from ct where '01248764' like prefix || '%' order
by length(prefix) desc limit 1;
id | prefix | price
----+--------+-------
4 | 0124 | 0.1
(1 row)

template1=#




hubert depesz lubaczewski - 25-11-2006 00:07

  MJ wrote:
> Jest sobie baza zawierająca prefixy telefoniczne w postaci
> template1=# select * from ct;
> id | prefix | price
> ----+--------+-------
> 3 | 012 | 0.5
> 4 | 0124 | 0.1
> (2 rows)
> template1=#
> Jak zadać zapytanie mając pełen numer (np 012476486) aby dostać
> najbardziej precyzyjne dopasowanie w tabeli ( w tym wypadku 0124) ?
> Nie jestem guru w PostgreSQL i jakoś nic mi nie wychodzi ...

założyłeś tabele w template1? heh. no to się teraz zdziwisz jak założysz
nową bazę.

a to co chcesz jest proste:
select * from ct where '012476486' like prefix || '%' order by
length(prefix) desc limit 1;

depesz

--
mój boże, spraw abym milczał, dopóki się nie upewnię, że naprawdę mam
coś do powiedzenia. (c) 1998 depesz




Łukasz Kalbarczyk - 25-11-2006 00:07

  Dnia Fri, 24 Nov 2006 09:13:06 +0100, hubert depesz lubaczewski napisał(a):

> a to co chcesz jest proste:
> select * from ct where '012476486' like prefix || '%' order by
> length(prefix) desc limit 1;

Mam wrażenie, że to będzie nieskończenie wolne.

--
ŁK
http://moze.sprawdz.sobie.to





hubert depesz lubaczewski - 26-11-2006 00:15

  Łukasz Kalbarczyk wrote:

> Dnia Fri, 24 Nov 2006 09:13:06 +0100, hubert depesz lubaczewski
> napisał(a):
>
>> a to co chcesz jest proste:
>> select * from ct where '012476486' like prefix || '%' order by
>> length(prefix) desc limit 1;
>
> Mam wrażenie, że to będzie nieskończenie wolne.

masz rację: masz wrażenie.

depesz

--
mój boże, spraw abym milczał, dopóki się nie upewnię, że naprawdę mam
coś do powiedzenia. (c) 1998 depesz




Marcin Jurczuk - 26-11-2006 00:15

  Łukasz Kalbarczyk napisał(a):
> Dnia Fri, 24 Nov 2006 09:13:06 +0100, hubert depesz lubaczewski napisał(a):
>
>> a to co chcesz jest proste:
>> select * from ct where '012476486' like prefix || '%' order by
>> length(prefix) desc limit 1;
>
> Mam wrażenie, że to będzie nieskończenie wolne.
>
Wstępne testy pokazują, że jest wystarczająco szybkie, żeby nie
powiedzieć porównywalne
z normalnym select..




Michal Jankowski - 26-11-2006 00:15

  Marcin Jurczuk <mj-usunto@tkb.pl> writes:

>>> select * from ct where '012476486' like prefix || '%' order by
>>> length(prefix) desc limit 1;
>> Mam wrażenie, że to będzie nieskończenie wolne.
>>
> Wstępne testy pokazują, że jest wystarczająco szybkie, żeby nie
> powiedzieć porównywalne z normalnym select..

A bez "limit 1" to zwraca miliard rekordów czy trzy?

8-)

MJ




Marcin Jurczuk - 26-11-2006 00:15

  Michal Jankowski napisał(a):
> Marcin Jurczuk <mj-usunto@tkb.pl> writes:
>
>>>> select * from ct where '012476486' like prefix || '%' order by
>>>> length(prefix) desc limit 1;
>>> Mam wrażenie, że to będzie nieskończenie wolne.
>>>
>> Wstępne testy pokazują, że jest wystarczająco szybkie, żeby nie
>> powiedzieć porównywalne z normalnym select..
>
> A bez "limit 1" to zwraca miliard rekordów czy trzy?
>
> 8-)
>
> MJ
zwraca wszystkie które pasują
czyli jeśli mam w bazie:
012
0124
01246
a zadam pytanie o prefix 012469857 to zwraca wszystkie trzy.




Michal Jankowski - 26-11-2006 00:15

  Marcin Jurczuk <mj-usunto@tkb.pl> writes:

>>>> Mam wrażenie, że to będzie nieskończenie wolne.
>>>>
>>> Wstępne testy pokazują, że jest wystarczająco szybkie, żeby nie
>>> powiedzieć porównywalne z normalnym select..
>> A bez "limit 1" to zwraca miliard rekordów czy trzy?

> a zadam pytanie o prefix 012469857 to zwraca wszystkie trzy.

Toteż właśnie - sortowanie trzech elementów raczej nie trwa długo 8-).

MJ
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int postgresql Select count(*) czy raczej Select count(ID) [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?= Postgres - replikcja master-master Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= =?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shutter.opx.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