Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Id-ovi odvojeni zarezima

[es] :: MySQL :: Id-ovi odvojeni zarezima

[ Pregleda: 1544 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.dialup.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Id-ovi odvojeni zarezima30.06.2009. u 15:20 - pre 179 meseci
Ćao!

U tabeli se nalaze slogovi sledećeg tipa:
ID NAZIV OPIS IDROLES
1 aaaaa bbbbb 33;11;2;3;4;6
1 ccccc ddddd 1;2;6;7
...

Kao što vidite, u bazi ne postoji posebna tabela za relaciju(kao što bi trebalo) već su id-ovi rola, odvojeni sa ';' karakterom upisani u jedno polje.
Na koji način da napišem upit koji će mi za određen ID role izvući sve zapise koji imaju dozvolu za tu rolu?

SELECT * FROM tabela1 WHERE IDROLES LIKE '%parID%' mi je nesiguran jer ako tražim za id 11 proćiće i za 111.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-2.sezampro.yu.



+33 Profil

icon Re: Id-ovi odvojeni zarezima30.06.2009. u 18:51 - pre 179 meseci
Ne poznajem MySQL baš toliko sa teorijske strane, al' ta tvoja tabela krši prvu normalnu formu (ili možda drugu, ne znam ), al' ako baš hoćeš da uradiš to što ti treba, probaj ovako:
Code:
$sql = "SELECT * FROM tabela WHERE roles_id RLIKE '$roleId;?'"

Al' to je sve prkošenje osnovnim idejama i principima SQL-a.

Znam, bilo bi idealno kad bi u MySQL-u postojao, kao što postoji u PHP-u, neki explode, koji bi vratio niz, pa onda da u njemu radiš neki in_array, al' ja ne znam za takve f-je...
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
..2.252.195.static.beotel.net.



+19 Profil

icon Re: Id-ovi odvojeni zarezima30.06.2009. u 23:37 - pre 179 meseci
Citat:
SELECT * FROM tabela1 WHERE CONCAT(';',IDROLES,';') LIKE '%;parID;%';

"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 05:34 - pre 179 meseci
nikola, u tvom primeru ce opet za trazeno 11 pronaci 111

miroslav, u tvom primeru ako polje ne pocinje sa ; i ne zavrsava se sa ; mozes da promasis prvi ili poslednji id u polju

mare, tu klipersku tabelu normalizuj i to naplati kome god sada prebacujes taj kliper/cobol sistem u sql + sta god inace ce se vratiti da te ujede kad tad ..

ako bas hoces da se maltretiras sa tim .. imas dva nacina .. nijedan ne valja .. jedan je da radis filtriranje na klijentu, mysql ce svakako da radi full table scan i nista nece raditi to filtriranje brze od tebe, a ti ako imas 3 klijenta koji to rade, bolje da oni podele posao nego da mysql radi to sam ... drugi nacin je da to radi mysql .. ako ti pocinju i zavrsavaju se sva polja sa ; onda ti miroslavov upit radi posao, ako ne onda moras malo da prebudzis nikolin upit sa rlike (da dodas (^|;) na pocetak i (;|$) na kraj tako da radi match za "pocetak stringa ili tackazarez" i isto tako za kraj ili tackazarez .. pogledaj manual za rlike kako to tacno da izvedes


e sad .. treci "dobar" nacin bi bio da napises UDF koji bi radio "split" .. pa onda imas nesto tipa:
Code:

SELECT * FROM tabela1 WHERE trazeni_id IN ( split(glupa_kolona) );


proguglaj mozda nadjes takav udf ili stored negde je to sigurno neko vec napisao .. posto lenjih programera i starih kliper baza ima koliko oces
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 07:14 - pre 179 meseci
Da se koriste zarezi "," umesto tačka zarez ";" mogao bi da koristiš

FIND_IN_SET(11,glupakolona)
"Common sense is not so common." - Voltaire
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 07:26 - pre 179 meseci
Citat:
Shinhan: Da se koriste zarezi "," umesto tačka zarez ";" mogao bi da koristiš

FIND_IN_SET(11,glupakolona)


sto je najgore .. mogao bi da uradi nesto tipa

Code:

FIND_IN_SET(11,REPLACE(glupakolona, ';',','))


evo cak i radi :D :D :D

Code:

mysql> select if(FIND_IN_SET(11,REPLACE('1;2;3;4;5;6;7;111;3243', ';',','))>0,'ima','nema') as imanema;
+---------+
| imanema |
+---------+
| nema    | 
+---------+
1 row in set (0.00 sec)

mysql> select if(FIND_IN_SET(111,REPLACE('1;2;3;4;5;6;7;111;3243', ';',','))>0,'ima','nema') as imanema;
+---------+
| imanema |
+---------+
| ima     | 
+---------+
1 row in set (0.00 sec)



 
Odgovor na temu

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.dialup.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 11:25 - pre 179 meseci
Ljudi hvala vam za ponuđena rešenja! Ipak sam insistirao da se struktura tabela promeni tako da je napravljena još jedna tabela koja će sadržati spoljne ključeve.
Inače, ja sam pre toga došao do sledećeg rešenja za situaciju iz prve poruke:
Code:
SELECT * FROM todo WHERE roles REGEXP '(;2;)|(^2;)|(;2$)|(^2$)'

Broj 2 u upitu je ID.
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
..2.252.195.static.beotel.net.



+19 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 12:21 - pre 179 meseci
@Bogdan: zato sam i stavio CONCAT(';',IDROLES,';') da obezbedim da počinje i završava sa ;
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Id-ovi odvojeni zarezima01.07.2009. u 14:43 - pre 179 meseci
@miroslav, sad sam kreno da ti objasnjavam kako nisi u pravu :D ... sorry .. ti si "glupu kolonu" zagradio sa ; tako da sta god je inicijalno ubaceno like ce vratiti ok vrednost .. odlicna ideja :D mnogo bolje nego ono sa replace :D :D :D

@mare, kazem ti, to je jedino pravo resenje, ono se uvek okrene i ujede te .. posle nedelju, mesec ili dva .. ali odvali parce kad se desi ...
 
Odgovor na temu

[es] :: MySQL :: Id-ovi odvojeni zarezima

[ Pregleda: 1544 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.