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

Find replace where...

[es] :: MySQL :: Find replace where...

[ Pregleda: 2229 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Find replace where...12.02.2010. u 21:17 - pre 172 meseci
Imam sledecu tabelu:
Code:

id       values             times
1        1,2,3,4,5,7,14     2,5
2        1,2,4,5            2,5,7
3        2,3                7,8
3        5,15,152           1,5,7

Trebam da procesljam kolone values i times i da izmenim vrednosti polja tamo gde se pojavljuje odredjeni broj.
Npr ako hocu da izbacim broj 5, tabela bi izgledala ovako:
Code:

id       values             times
1        1,2,3,4,7,14       2
2        1,2,4              2,7
3        2,3                7,8
3        15,152             1,7


Kako bi izgledao query za tako nesto? Neka varijanta ovoga:
Code:

UPDATE tbl SET
(values = replace(values, '1,2,3,4,5,7,14', 1,2,3,4,7,14),
times = replace(times, '2,5', 2) WHERE id= '1'),
(values = replace(values, '1,2,4,5', 1,2,4),
times = replace(times, '2,5,7', 2,7) WHERE id= '2')


pa tako za svaki red, mozda uz pomoc for petlje...
php-om sam dobio uredjene parove koje treba zameniti, izdvojio sam samo one redove
gde se pojavljuje odredjeni broj.

P.S.
Jel moguce automatski to odraditi u SELECT upitu i odmah dodati replace?
Code:
SELECT values FROM tbl WHERE FIND_IN_SET('$id', values);";


[Ovu poruku je menjao sekvoja dana 13.02.2010. u 01:37 GMT+1]
 
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: Find repalce where...12.02.2010. u 21:47 - pre 172 meseci
to je tuga i zalost u sql-u posto tabela nije normalizovana ... (pogledaj http://www.mysql.rs/2009/05/mo...e-baze-podataka-normalizacija/ ) ...

ta kobolovska / kliperaska "baza" je tipican primer "kako ne treba" .. i bilo kakav rad iz sql-a sa tim se svodi na trikove i JAKO JE SPORO posto je nemoguce koristiti bilo kakve indexe, bilo kakvu "logiku" osim svaki put ici kroz celu tabelu i procesirati podatke. da li ces da prolazis kroz tabelu sql-om, stored procedurom ili direktno u php-u - nema nikakve razlike .. jednako je sporo ...

da izbacis $id iz svih redova gde postoji

Code:

-- izbaci $id

UPDATE tbl SET 
values =  TRIM( BOTH ',' FROM REPLACE( CONCAT(',',values,','), CONCAT(',',$id,','), ''))
WHERE FIND_IN_SET('$id', values)


 
Odgovor na temu

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Re: Find replace where...13.02.2010. u 00:05 - pre 172 meseci
Citat:
bogdan.kecman: to je tuga i zalost u sql-u posto tabela nije normalizovana ...


... a bice bolje kada apsolviram mysql :)

Evo pojasnicu jos malo moj problem...

Tabela koju sam postavio u mom prvom postu je u stvari tabela "pages".
Brojevi 1,2,3,5,7 itd su id-ovi redova iz tabele "prozori" iz kojih je potrebno
izvuci podatke koji ce biti prikazani na odredjenoj strani.

Zasto hocu da izbacim npr broj 5?
Upravo zato sto je admin mozda obrisao red sa id-om 5 iz tabele "prozori"
i zelim da obrisem svaki trag o tom redu. To je ono sto se u tvojim tekstovima
naziva anomalija pri brisanju. Sa anomalijom pri promeni nemam
problema jer su svi prozori izolovani u zasebnu tabelu.

Jel onda ovo 1nf?

Znaci da razvijem dalje u 2nf da bih resio problem brisanja...

Dobri su tekstovi na mysql.rs, mada malo tezi za pocetnike...

[Ovu poruku je menjao sekvoja dana 13.02.2010. u 01:21 GMT+1]

[Ovu poruku je menjao sekvoja dana 13.02.2010. u 01:38 GMT+1]
 
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: Find replace where...13.02.2010. u 01:19 - pre 172 meseci
Citat:
sekvoja: ... a bice bolje kada apsolviram mysql :)


nije to vezano samo za mysql .. bilo koji rdbms ima isti "problem" - moras da normalizujes bazu

Citat:

Jel onda ovo 1nf?


nije. dokle god cuvas 5 vrednosti u jednoj koloni - to nije normalna forma, procitaj ponovo post za prvu normalnu formu i pogledaj primer.

Citat:

Znaci da razvijem dalje u 2nf da bih resio problem brisanja...


razvi ga u 3nf. dalje je nepotrebno mada bi ti osnovni problem za ovu tabelu resio i 1nf

Citat:

Dobri su tekstovi na mysql.rs, mada malo tezi za pocetnike...


na zalost, ja jednostavnije ne umem. izbacio sam celu relacionu algerbu i "fancy" termine, ostavio samo ono najneophodnije i spustio na najnizi moguci nivo .. mozda bi to neki prosvetar mogo bolje al ..

sve u svemu - ako imas bilo kakvih pitanja vezano za bilo sta tamo, slobodno ostavi tamo komentar pa cu da probam da razjasnim (ili napravi ovde novu temu .. svejedno je) ..

normalizaciju moras da skapiras .. bar nesto izmedju 2 i 3 .. preko 3nf za "obicne" aplikacije nije potrebno, a ume i da bude kontra produktivno...
 
Odgovor na temu

[es] :: MySQL :: Find replace where...

[ Pregleda: 2229 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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