ďťż
 
like, in, połączenie ďťż
 
like, in, połączenie
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

like, in, połączenie



X t l a n - 23-10-2005 18:54
like, in, połączenie
  Cześć.

Przydałoby mi się coś w MySQL, co działa jak
select * form baza where pole1 in ('a','b','cc','dd')

z tą różnicą, że chciałbym aby nie było to dokładne dopasowanie, a
dopasowanie jak za pomocą klauzuli like.

Obrazowo mogłoby to wyglądać tak:
select * form baza where pole1 in ('a%','b%','cc%','dd%')

ale oczywiście coś takiego nie działa tak, jak chcę, a zapytanie:
select * form baza where pole1 like 'a%' or pole1 like 'b%' or pole1
like 'cc%' or pole1 like 'dd%' jest za długie .... (działa, rzecz jasna)

Myślałem o regexp, ale może da się to jakoś prościej jeszcze
przygotować.

Dziękujęza rady.





Artur Muszynski - 23-10-2005 18:54

 
"X t l a n" <x t l a n @ i n t e r i a . p l> wrote in message
news:djasna$61r$1@news.onet.pl...
> Cześć.
>
> Przydałoby mi się coś w MySQL, co działa jak
> select * form baza where pole1 in ('a','b','cc','dd')
>
> z tą różnicą, że chciałbym aby nie było to dokładne dopasowanie, a
> dopasowanie jak za pomocą klauzuli like.
>
> Obrazowo mogłoby to wyglądać tak:
> select * form baza where pole1 in ('a%','b%','cc%','dd%')
>
> ale oczywiście coś takiego nie działa tak, jak chcę, a zapytanie:
> select * form baza where pole1 like 'a%' or pole1 like 'b%' or pole1 like
> 'cc%' or pole1 like 'dd%' jest za długie .... (działa, rzecz jasna)

Czy to jakiś istotny problem, że długie? Można też zastosować union. Dziwny
w ogóle wydaje mi się twój problem. Przynajmniej optymalizujesz to
zapytanie? Np like 'a%' or like 'ab%' można skrócić do like 'a%'.

> Myślałem o regexp, ale może da się to jakoś prościej jeszcze przygotować.

Regexp będzie chyba dużo wolniejszy w twoim przypadku.

artur

>
>
> Dziękujęza rady.




X t l a n - 23-10-2005 18:54

  > Czy to jakiś istotny problem, że długie?

Wiesz, jak w ten sposób prześlesz z 1000 słów z listy wyboru, to wydaje
mi się, że warto baczyć na długość łańcucha z zapytaniem. Co do
optymalizacji logicznej nie ma mowy, dane mogą być różne więc trzebeby
pisać jakąś funkcję optymalizującą takie zapytanie - szkoda chyba czasu
na tą zabawę.




Filip Sielimowicz - 23-10-2005 18:54

 
Użytkownik "X t l a n" <x t l a n @ i n t e r i a . p l> napisał w
wiadomości news:djdbmr$dlk$1@news.onet.pl...
>> Czy to jakiś istotny problem, że długie?
>
> Wiesz, jak w ten sposób prześlesz z 1000 słów z listy wyboru, to wydaje mi
> się, że warto baczyć na długość łańcucha z zapytaniem. Co do optymalizacji
> logicznej nie ma mowy, dane mogą być różne więc trzebeby pisać jakąś
> funkcję optymalizującą takie zapytanie - szkoda chyba czasu na tą zabawę.

Wiesz, funkcja być może nie byłaby taka złożona, za to bazie może to zrobić
naprawdę bardzo dużą różnicę (jeśłi będziesz w ten sposób operował na dużych
ilościach danych).





X t l a n - 24-10-2005 19:53

  > Wiesz, funkcja być może nie byłaby taka złożona, za to bazie może to
> zrobić naprawdę bardzo dużą różnicę (jeśłi będziesz w ten sposób
> operował na dużych ilościach danych).

Podejmę decyzję w praktyce - jeśli będzie działać wolno, wtedy się doda.




artiun - 24-10-2005 19:53

  X t l a n napisał(a):
>> Wiesz, funkcja być może nie byłaby taka złożona, za to bazie może to
>> zrobić naprawdę bardzo dużą różnicę (jeśłi będziesz w ten sposób
>> operował na dużych ilościach danych).
>
>
> Podejmę decyzję w praktyce - jeśli będzie działać wolno, wtedy się doda.
Jeśli takie coś Ci jest potrzebne to oznacza jedno. Masz mało danych w bazie
(ilość rekordów). I tu nie jest ważne jak długie będzie zapytanie - a ile
zwróci wyników. Wtedy regexp - wystarczy. Popatrz na usera - jeśli dla
takiej (zaproponowanej w pytaniu konstrukcji) uzyskasz np. (mało) 10000
wyników to co? Zapłacisz mu za dniówkę w przeglądaniu, ok. 500 się pogubi i
nie zauważy tego czego szuka. Zapakuj sobie regexp'y nie starcisz za wiele.
Moim zdaniem problem wydumany (czasowo nie ma znaczenia dla obsługi).

--
Artur




X t l a n - 24-10-2005 19:53

  >> Podejmę decyzję w praktyce - jeśli będzie działać wolno, wtedy się
>> doda.
> Jeśli takie coś Ci jest potrzebne to oznacza jedno. Masz mało danych w
> bazie (ilość rekordów).

Około 1 miliona.

> I tu nie jest ważne jak długie będzie zapytanie
> - a ile zwróci wyników.

Do paru tysiecy i trochę nie podoba mi się, że z PHP do MySQL'a będzie
sżło takie długie zapytanie. A jeszcze rozważając, że zapytanie będzie
pracowało na kilku tableach łączonych JOIN i dla każej z nich będzie ten
zestaw OR pole_x like 'wartosc_x_n%' to może łądniej byłoby to: 1)
optymalizować względem długości zapytania, 2) likwidować warunki
nadmiarowe.

Sądziłem, że punkt 1) można łatwiutko osiągnąć. No a w regexp trzeba
jeszcze będzie uważeć na te frazy ze względu na znaki specjalne, w like
są tylko dwa % i _

> Wtedy regexp - wystarczy. Popatrz na usera -
> jeśli dla takiej (zaproponowanej w pytaniu konstrukcji) uzyskasz np.
> (mało) 10000 wyników to co? Zapłacisz mu za dniówkę w przeglądaniu,
> ok.
> 500 się pogubi i nie zauważy tego czego szuka. Zapakuj sobie regexp'y
> nie starcisz za wiele. Moim zdaniem problem wydumany (czasowo nie ma
> znaczenia dla obsługi).

Możliwe.




artiun - 24-10-2005 19:53

  X t l a n napisał(a):
>>> Podejmę decyzję w praktyce - jeśli będzie działać wolno, wtedy się doda.
>>
>> Jeśli takie coś Ci jest potrzebne to oznacza jedno. Masz mało danych w
>> bazie (ilość rekordów).
>
>
> Około 1 miliona.
>
>> I tu nie jest ważne jak długie będzie zapytanie
>> - a ile zwróci wyników.
>
>
> zestaw OR pole_x like 'wartosc_x_n%' to może łądniej byłoby to: 1)
> optymalizować względem długości zapytania, 2) likwidować warunki
> nadmiarowe.
sorry - nie ma znaczenia czy piszesz tabela.pole czy tylko pole (no mniej
znaków :-). Uproszczenie konstrukcji (in ( a%.. sprowadza się właśnie do
rozpisania tej konstrukcji wg przykładu jaki został podany. Nic to nie zmienia.
>
> Sądziłem, że punkt 1) można łatwiutko osiągnąć. No a w regexp trzeba
> jeszcze będzie uważeć na te frazy ze względu na znaki specjalne, w like
> są tylko dwa % i _
>
Moim zdaniem to przewidywanie rozbudowy bazy w drażliwych punktach pozwala
na określenie gdzie może się znacząco rozrosnąć. I tu trzeba raczej
ograniczać ilość danych dla usera końcowego.

--
Artur
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Połączenie C++ <-> MySQL 4.0. Biblioteka MySQL++. Polaczenie Oracle Database XE z Database 10g (10.1.0.4.2) ORA-12154: TNS: nie udalo sie rozstrzygnac podanego identyfikatora polaczenia TOAD blad polaczenia z serwerem: ORA-01031 insufficient privileges MS SQL 2005 nie działa sqlmcd - nie może się połączyć [mysql] wolne polaczenie zewnetrznych hostow z baza last inser id i polaczenie z baza danych mysql [FB, ODBC] Ilosc otwartych polaczen do bazy ORA-12547 TNS Zgubione połączenie pomocy [PostgreSQL] ODBC - szyfrowanie danych polaczenia w rejestrze
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kfia-tek.keep.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