[ feniks-sd @ 11.09.2010. 14:00 ] @
Imam bazu podataka o userima. Unutar baze nalazi se tablica sa podacima o userima, između ostaloga i parametri usera koji su spremljeni npr ovako

Code:
language= 
editor= tyni
helpsite= 
timezone=0 
valid=2010-09-27 


Znaći pojedini podaci su odvojeni sa novim redom.
Pojedine podatke nakon što ih uzmem iz baze podataka razdvojim na ovaj način.

Code:

$data="$sql_result[0] ;
list ($param1, $param2, $param3, $param4) =expolode ("\n" , $data) ;


Moj problem mi je taj što ponekad nemam sve ove parametre , ili imam neke druge. Nemam nikada definirano koliko je tih paramentara niti to mogu definirati. Svaki user može imati različite parametre.

Iz tih razloga ova metoda nije primjenjiva jer ja želim npr samo parametar "valid".

Kako bi to elagentno riješio.

[ Nikola Poša @ 11.09.2010. 15:11 ] @
Sa takvim podacima u bazi skalabilnost je očajna. Ne znam od koga si video da se podaci na taj način čuvaju u bazi. Za tako nešto onda nisi ni morao da koristiš SQL bazu. Moj predlog ti je da napraviš jednu dodatnu tabelu koja bi čuvala sve te neke dodatne opcije i parametre za svakog korisnika, a često ćeš za takve podatke naići na pojam meta podaci. Što se kolona u toj tabeli tiče, pored primarnog ključa (id), kao i ključa koji bi predstavljao vezu sa tabelom sa korisnicima, npr. user_id, ona bi trebala da ima kolone key i value, koji bi predstavljali upravo naziv nekog parametra/opcije (key) i njenu vrednost (value). I evo kako bi onda izgledao taj tvoj primer sa dohvatanjem "valid" opcije:
Code:
SELECT u.username, um.value AS 'valid' 
FROM users u
INNER JOIN users_meta um ON u.id = um.user_id
WHERE um.key = 'valid'

Pritom je uvek sigurnije da tabele join-uješ sa LEFT OUTER JOIN klauzulom, jer ne mora da znači da će za nekog korisnik postojati neki parametar/opcija.

Ovde imaš jedan odličan članak koji opisuje upravo taj pristup organizacije baze.
[ Goran Rakić @ 11.09.2010. 16:24 ] @
Slažem se sa ovim što je Nikola napisao, savet ti je da promeniš strukturu zapisa.

Inače problem koji te muči lako rešavaš ako kada pročitaš podatke razbiješ redove u niz (explode()) i potom u petlji svaki red razbiješ na ključ i vrednost (pre i posle znaka jednako) i zapišeš u asocijativni niz $params[$key] = $value;. Ako prethodno inicijalizuješ $params na podrazumevane vrednosti možeš uvek da pročitaš sve parametre, u protivnom proveravaš sa if( isset($params['valid']) ) { ... }.
[ feniks-sd @ 12.09.2010. 05:25 ] @
Baza podataka je od CMS sustava čiji ja nisam autor i nemam utjecaj na strukturu baze podataka, pa tako sve do sada gore navedeno pada u vodu. U međuvremenu riješio sam problem korištenjem već ugrađenih procedura u sam CMS.