PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   MySQL upit (LIKE) (https://forum.pcekspert.com/showthread.php?t=202027)

svebee 03.11.2010. 22:13

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.

iwwwek 03.11.2010. 22:30

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.

Milentije 03.11.2010. 22:38

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 '!';


svebee 03.11.2010. 22:57

Citiraj:

Autor iwwwek (Post 1769249)
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 (Post 1769263)
Code:

SELECT *
FROM XX
WHERE YY LIKE '!11!' escape '!';


ne radi, ništa ne pronalazi. ni ,11, ni ,11 ni 11, .

Milentije 03.11.2010. 23:19

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?

svebee 03.11.2010. 23:25

Citiraj:

Autor Milentije (Post 1769294)
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 :beer:

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... :stoopid:

hvala svejedno :beer:

doublev 04.11.2010. 17:14

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...

iwwwek 04.11.2010. 19:38

MySQL ima i "Regular Expressions" pa probaj s time.

http://dev.mysql.com/doc/refman/5.1/en/regexp.html


Sva vremena su GMT +2. Sada je 08:33.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger