[ zgas @ 25.08.2007. 09:41 ] @
Kako da napravim WHERE deo upita koji ce da selektuje redove u kojima postoji BAR NEKA od vrednosti?

Imam SET polje koje moze da sadrzi definisane vrednosti ('a','1','b','2').

Hocu da selektujem samo one redove koji sadrze BAR NEKU od sledecih vrednosti (npr. 'a' i 'b')

Znaci tu dolaze u obzir npr. redovi cije je SET polje popunjeno sa: 'a' ili 'b' ili 'a,b' ALI I 'a,1' ili 'b,2' ili 'a,1,b,2'

Ali ne dolaze u obzir polja popunjena kao '1' ili '2' ili '1,2'


Da li postoje neki jednostavan nacin za ovu namenu gde necu morati praviti komplikacije sa puno AND navoda za svaku kombinaciju...
Mozda mora da se koristi IF funkcija i neka text funkcija... (Jos sam na verziji 4 Mysql-a. Nemam verziju 5.)

Imate li predlog i primer?

Hvala.
[ chachka @ 25.08.2007. 10:14 ] @
Kolonu (a ne polje) si nazvao 'SET' i dodelio si joj vrednost tipa VARCHAR.

SET se sa engleskog prevodi kao SKUP. Skup se u relacionom modelu (pa i u SQL-u) predstavlja tabelom, a ne kolonom tipa VARCHAR.

Jablan je juče dao savet na sličan problem u ovoj temi, citiram: "Redizajniraj bazu."

Ako to ne uradiš, imaćeš sve više i više sličnih problema.
[ zgas @ 25.08.2007. 10:56 ] @
Ne - Nesporazum.
Ja sam konkretnu KOLONU o kojoj govorim nazvao sa 'tip_izdanja' i dao sam joj vrednost tipa SET.
To sam samo parafrazirao kada sam rekao da imam SET polje.

Ne znam da li je to neka prepreka i problem za resavanje mog pitanja?
[ jablan @ 25.08.2007. 11:02 ] @
Citat:
Why You Shouldn't Use SET

The MySQL SET datatype is not commonly used for a few reasons; First, using the MySQL SET datatype limits you to 64 elements. While you could get around this by using multiple SETs, this still represents a loss of versatility. Second, you cannot include commas in your set elements, as the comma is an element separator. Third, using a set means your data is not normalized. In our above example, we are tracking a person's interests for a hypothetical dating site. In a normalized schema, there should be three tables: one for the person, one for all possible interests, and one that links a person to their particular interests. Fourth, an INDEX on a set datatype is going to refer to the set as a whole and will not be used for searching individual elements (this may or may not be a problem for certain applications).

sa http://dev.mysql.com/tech-reso...ticles/mysql-set-datatype.html

Na dnu iste stranice imaš kako se radi select nad poljima tog tipa. Ukratko, za ovo što tebi treba trebalo bi da koristiš bitwise operatore (tipa WHERE tip_izdanja & 10).

Ili (verovatno bolje rešenje) da izvučeš to polje u posebnu tabelu.

//edit: pogrešan operator

[Ovu poruku je menjao jablan dana 25.08.2007. u 12:16 GMT+1]
[ zgas @ 25.08.2007. 11:18 ] @
Hvala puno na pomoci,

zelim da pitam:

Ja imam dosta tabela sa po dve ili tri SET kolone. A struktura baze mi se dosta komplikuje ako te SET kolone izvucem u druge tabele. Takodje, sam PHP kod mi se komplikuje za pristup tim poljima. Mozda je tako jednostavnije izvrsiti neke operacije, ali sve sto sam naveo se dosta komplikuje.

Sta vi mislite, kako naci neku ravnostezu, i da li ipak SET treba izbegavati?
[ jablan @ 25.08.2007. 11:29 ] @
Ako te iste vrednosti koje držiš u SET poljima imaš u različitim tabelama, definitivno u novu tabelu. Pomoglo bi kada bi napisao za šta koristiš SET polja.
[ zgas @ 25.08.2007. 11:54 ] @
Nemam bas sve iste vrednosti u razlicitim tabelama, a ako ima onda je tu u dve ili tri. Bez obzira to mi jako komplikuje PHP skripte za pristup baze, jer koristim automatski generisanje PHP skripti za pristup, i to radi samo na jednoj tabeli. Ako su tabele povezane onda taj sistem ne moze da generise formu. Ne znam da li postoji neki generator koji moze? A meni je jako komplikovano da pisem tako mnogo php skripti za pristup. Radim to samo tamo gde moram.

Oprosti, jos ne mogu da dodjem sebi da ne mobu da koristim nekako selektovanje kolona cije SET polje sadrzi bar jednu od vrednosti. BitWISE jos uvek ne razumem ako je to resenje.

Redizajniranje baze mi pravi ogroman posao, ako nemam neki generator skripti...
[ jablan @ 25.08.2007. 12:03 ] @
Citat:
zgas: Ako su tabele povezane onda taj sistem ne moze da generise formu.

Onda ti je mnogo loš sistem. Ja u životu nisam radio sa bazom u kojoj tabele nisu povezane (ustvari, lažem, jesam jednom jako davno, ali se trudim da izbrišem taj period iz sećanja ;))
Citat:
BitWISE jos uvek ne razumem ako je to resenje.

To je jedna od osnova programiranja - SET tip podataka se zapisuje binarno, kao niz bitova (flagova). Stanje određenih flagova proveravaš tako što AND-uješ tu vrednost sa nekom tzv. "maskom", odnosno brojem u kome su postavljeni oni flagovi po kojima hoćeš da filtriraš.

http://en.wikipedia.org/wiki/Bitwise_operation
http://en.wikipedia.org/wiki/Mask_%28computing%29
[ zgas @ 25.08.2007. 12:07 ] @
Hvala ti.

Zapravo ja imam mnogo povezanih tabela , jedna tabela mi je povezana sa cak 15 drugih... znaci ja radim na taj nacin. Ali ako bidem uvodio jos povezivanje sa novom tabelom za svako SET polje to mi mnogo komplikuje (ne toliko samu bazu podataka) koliko php kod za pristup bazi.