Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 03.11.2010., 22:13   #1
svebee
/
 
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
Arrow MySQL upit (LIKE)

Imam string koji izgleda npr. ovako

Citiraj:
1,5,11,12,15,121,130
i drugi koji izgleda ovako

Citiraj:
111,121,130
kako mogu postaviti uvjet da mi pronađe taj i taj redak koji sadrži dio stringa "11" - znači samo jedanaest, a ne sto i jedanaest. Ako bi išao na %11% izbacio bi oba retka, ako bi išao na %,11,% onda bi bilo u redu, ali bih morao ispitivati za sve kombinacije zareza (ispored/iza) tj. upit bi trebao ovako izgledati

Citiraj:
SELECT * FROM XX WHERE string LIKE %,11,%
OR string LIKE %11,%
OR string LIKE %,11%
a, ako bih tražio dva takva upita to bi naraslo na ukupno 3 na drugu kombinacija.

Citiraj:
%,11,% AND %,12,%

%,11,% AND %,12%
%,11,% AND %12,%
%,11,% AND %12%

%,11% AND %,12,%
%11,% AND %,12,%
%11% AND %,12,%

%11,% AND %12,%
%,11% AND %,12%
nadam se da ste shvatili poantu mogao bi se dodati još zarez na početak i kraj stringa, ali mi to ne odgovara.
svebee je offline   Reply With Quote
Staro 03.11.2010., 22:30   #2
iwwwek
xampp rulez
 
iwwwek's Avatar
 
Datum registracije: May 2009
Lokacija: Zagreb
Postovi: 90
U ovome stringu i zarez je samo jedan znak u stringu poput jedinice pa ne vidim razloga zašto ne bi stavio %,11,%.
Tko ćeš naći sve retke gdje se pojavljuje "11".
Ako te stringove vadiš van i zarezi ti smetaju jednostavno ih trimaj.
Ne vidim zašto ti to ne odgovara.
__________________
iwwwek je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 03.11.2010., 22:38   #3
Milentije
Adrenaline junkie
Moj komp
 
Milentije's Avatar
 
Datum registracije: Apr 2006
Lokacija: Doboj - Banja Luka / Republika Srpska
Postovi: 3,575
Problem je ako se zadesi neka necjelobrojna vrijednost tipa 24,11 ili 11,99.

Ne mogu se sada sjetiti da me ubiješ, ali de probaj ovo

Code:
SELECT *
FROM XX
WHERE YY LIKE '!11!' escape '!';
__________________
Lenovo ThinkPad W530 - Core i7 3840QM, 32 GB RAM, SSD Samsung 512 GB, nVidia Quadro K1000M 2 GB, 15.6" 1920x1080 IPS, baterija 9 ćelija

Zadnje izmijenjeno od: Milentije. 03.11.2010. u 22:45.
Milentije je offline   Reply With Quote
Staro 03.11.2010., 22:57   #4
svebee
/
 
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
Citiraj:
Autor iwwwek Pregled postova
U ovome stringu i zarez je samo jedan znak u stringu poput jedinice pa ne vidim razloga zašto ne bi stavio %,11,%.
Tko ćeš naći sve retke gdje se pojavljuje "11".
jedino ako string započinje i završava zarezom! ali kažem kako meni ta opcije ne odgovara. inače neće izbaciti sve retke gdje se pojavljuje 11..npr. u stringu "11,12,13" on ga neće pronaći.

nešto drugo?

Citiraj:
Autor Milentije Pregled postova
Code:
SELECT *
FROM XX
WHERE YY LIKE '!11!' escape '!';
ne radi, ništa ne pronalazi. ni ,11, ni ,11 ni 11, .
svebee je offline   Reply With Quote
Staro 03.11.2010., 23:19   #5
Milentije
Adrenaline junkie
Moj komp
 
Milentije's Avatar
 
Datum registracije: Apr 2006
Lokacija: Doboj - Banja Luka / Republika Srpska
Postovi: 3,575
Tek sad vidjeh da sam pogresno razumio "zadatak" prvi put kad sam ga pogledao.
Nekako nisam baš siguran da je ovo izvodivo na neki dugi način osim onog koji si već naveo. On unos u tom polju gledao kao jednu vrijednost (string) i kada mu zadaš da traži *11* on tu ima više "poklapanja" (11, 111, 111). Na šta se odnose vrijednosti tog polja? Možeš li uraditi normalizaciju pa da toj još malo raščlaniš tako da ti svaka vrijednost između zareza ima svoje polje?
__________________
Lenovo ThinkPad W530 - Core i7 3840QM, 32 GB RAM, SSD Samsung 512 GB, nVidia Quadro K1000M 2 GB, 15.6" 1920x1080 IPS, baterija 9 ćelija
Milentije je offline   Reply With Quote
Staro 03.11.2010., 23:25   #6
svebee
/
 
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
Citiraj:
Autor Milentije Pregled postova
Tek sad vidjeh da sam pogresno razumio "zadatak" prvi put kad sam ga pogledao.
Nekako nisam baš siguran da je ovo izvodivo na neki dugi način osim onog koji si već naveo. On unos u tom polju gledao kao jednu vrijednost (string) i kada mu zadaš da traži *11* on tu ima više "poklapanja" (11, 111, 111). Na šta se odnose vrijednosti tog polja? Možeš li uraditi normalizaciju pa da toj još malo raščlaniš tako da ti svaka vrijednost između zareza ima svoje polje?
a ništa, onda ću si dati malo više truda pa "prepraviti" u !11!,!12!,!13! itd. (! je primjer samo) - onda će ići klasičan %!11!% način

iako mi se to čini puno previše nepotrebnih informacija, moram si dati još malo više truda pa postaviti zarez na početak i kraj, mislio sam to izbjeći ali ako nejde, nejde...

hvala svejedno
svebee je offline   Reply With Quote
Staro 04.11.2010., 17:14   #7
doublev
the letter
Moj komp
 
doublev's Avatar
 
Datum registracije: Sep 2005
Lokacija: 127.0.0.1
Postovi: 794
Kako se konkatenira na MySqlu? Sa + (Sql Server) ili sa || (Oracle)?

Ajde recimo da je +.
Ionako moraš raditi full table scan jer je like napisan sa početnim postotkom. Zašto onda ne napraviš nešto poput ovoga:

SELECT * FROM XX WHERE ','+string+',' LIKE '%,11,%'

Upravo sam to probao na Oracleu i stvar radi...
__________________
Exception up = new Exception("Illegal operation.");
throw up;

Zadnje izmijenjeno od: doublev. 04.11.2010. u 17:19.
doublev je offline   Reply With Quote
Staro 04.11.2010., 19:38   #8
iwwwek
xampp rulez
 
iwwwek's Avatar
 
Datum registracije: May 2009
Lokacija: Zagreb
Postovi: 90
MySQL ima i "Regular Expressions" pa probaj s time.

http://dev.mysql.com/doc/refman/5.1/en/regexp.html
__________________
iwwwek je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na