[ enes @ 10.05.2004. 23:53 ] @
Zdravo svima,

hteo bih da procitam podatke iz baze i da ih ubacim direktno u array (da bih posle mogao da pobrisem duple podatke).

Npr., podaci koje dobijam iz baze su 3,4,7,1,8,3,5,3,3,7,9,3,3,5,6,9,0,7 i zelim da na kraju kao rezultat dobijem brojeve koji se ne ponavljaju (u ovom primeru trazeni rezultat je npr. 3,4,7,1,8,5,9,6,0
Ako postoji neko jednostavnije resenje (MySQL ili PHP funkcija) ne bih se bunio ;-)
Citajuci manual za PHP, pronasao sam funkciju array_unique() koja ce obrisati duplikate, mada nikako ne mogu da napravim PHP kod za citanje iz baze i direktno ubacivanje u array.
Mozda je kod jednostavan, mada mi nista sto sam pokusao nije poslo za rukom. :-(

Please, HELP!

Pozdrav.
[ broker @ 11.05.2004. 00:35 ] @
Ako su dupli slogovi stvarno duplirani (sva polja imau isti sadrzaj) onda ce ti jedno SELECT DISTINCT * FROM tabel dati to sto ti treba.

Ako nisu potpuni duplikati vec su recimo dupli samo ID-ovi onda uradi

SELECT id, count(id) AS count_id
FROM tabela
GROUP BY id
ORDER BY id
HAVING count_id = 1

pa ces dobiti listu Id-ova koji imaju vise slogova u tabeli.

A ako ti je bas zapelo da petljas sa nizom evo ti funkcija koja moze da ti korsiti

Code:

/*
function Query2Array ($p_query_data, $p_keyfield = '') {

Od SQL rezultata $p_query_data napravi visedimensionalni niz koji sadrzi sve stavke i polja iz tabele.
Ako je naveden naziv polja $p_keyfield onda ce niz biti asocijativan sa vrednostima navedenog polja kao kljucevima.
*/
function Query2Array ($p_query_data, $p_keyfield = '') {
  $itemcounter = 0;
  $query_items = '';
  while ($query_item = mysql_fetch_assoc ($p_query_data)) { 
    if  ($p_keyfield == '') {
      $query_items[$itemcounter] = $query_item;
    } else {
      $query_items[$query_item[$p_keyfield]] = $query_item;
    }

    $itemcounter++;
  };
  return $query_items;
}
[ bluesman @ 11.05.2004. 01:55 ] @
evo ti kod koji sve strpa u jedan veliki array
Code:

$res = @mysql_query ($query);
if ($res)
{
    for ($records = false; $arrFetch = @mysql_fetch_array($res); $records[] = $arrFetch);
    @mysql_free_result($res);
}
if (is_array ($records))
    reset ($records);


Mislim da ne moze krace... Naravno, nemoj ovo da radis za UPDATE, DELETE... samo za SELECT, SHOW, DESCRIBE... odnosno one upite koji vracaju vrednosti

ako hoces da radis posle mysq_num_rows() nemoj da radis mysq_free_result(), ali to ti i ne treba jer mozes da dobijes isto sa count($records);

A onda sa svojim nizom radi sta hoces, dobice $records u obliku

$records = array(
0 => array (prvi red iz upita),
1 => array (drufi...),
.... koliko god ih ima
);
[ u_m @ 11.05.2004. 11:09 ] @
Code:

SELECT broj FROM tabela GROUP BY broj
                $br = $row["broj"];
                print "broj: $br ";


pozdrav
[ bluesman @ 12.05.2004. 01:01 ] @
?
[ enes @ 12.05.2004. 23:50 ] @
Citat:
bluesman:
evo ti kod koji sve strpa u jedan veliki array
Code:

$res = @mysql_query ($query);
if ($res)
{
    for ($records = false; $arrFetch = @mysql_fetch_array($res); $records[] = $arrFetch);
    @mysql_free_result($res);
}
if (is_array ($records))
    reset ($records);





Hvala SVIMA na odgovorima, i sa ovim kodom sam dobio sta sam trazio...

Pozdrav!
[ bluesman @ 13.05.2004. 01:33 ] @
Samo pazi sta "uzimas" iz baze, nemoj da radis ovako SELECT * FROM... pa da pokupis milion recorda - sve ces ih strpati u memoriju na serveru.
[ enes @ 17.05.2004. 23:48 ] @
Hvala "bluesman" jos jednom!

U medjuvremenu pronasao sam i ovo:
SELECT DISTINCT nesto FROM ...........

Pozdrav.
[ noviKorisnik @ 18.05.2004. 05:32 ] @
Da, DISTINCT je prva stvar koja ti je preporučena pre nedelju dana.
Citat:
broker:
Ako su dupli slogovi stvarno duplirani (sva polja imau isti sadrzaj) onda ce ti jedno SELECT DISTINCT * FROM tabel dati to sto ti treba.

Drago mi je što si ovo pronašao...
[ enes @ 18.05.2004. 23:11 ] @
Da u svakom slucaju hvala brokeru kao i SVIMA koji su hteli da pomognu....

Pozdrav jos jednom...