[ zlatko @ 18.11.2009. 12:06 ] @
Treba mi mala pomoc

Imam dve mysql tabele
tabela content koja izmedju ostalih ima redove id i title
i tabela files koma ima redove filename i content

Hocu u php-u da napravim listu title-ova iz content tabele, a da se ispod svakog title-a izlistavaju filename-ovi iz files tabele ako im je isti content broj sa id brojem title-a
Kako to da uradim?
[ Predrag Supurovic @ 18.11.2009. 12:57 ] @
Najbolje je da nadjes neku knjigu o bazama podataka za pocetnike. Ovo je banalan problem.


[Ovu poruku je menjao Gojko Vujovic dana 18.11.2009. u 22:15 GMT+1]
[ stankons @ 18.11.2009. 14:37 ] @
To se zove master - detail veza.

Mater:

Code:

select * from content


Detail:

Code:

select * from files where content=:id


Gde je :id parametar koji preko PHP - a prosleđuješ iz tabele content.

Ili

Code:

select * 
from content 
left join files on content.id=files.content


Ovim poslednjim upitom dobijaš sve zapise iz tabele content, i zapise iz tabele files, pod uslovom koji si naveo, gde će zapisi iz tabele content da se ponavljaju onoliko puta koliko ima zapisa u tabeli files.

Što se tiče prikaza, to je pitanje za PHP...
[ zlatko @ 18.11.2009. 14:38 ] @
Hvala Stanko

pokushao sam da spojim tabele sa LEFT JOIN ali kao rezultat dobijam
title1 - filename1
title1 - filename2
title1 - filename3
title2 - filename4
title2 - filename5
...

meni treba
title1
- filename1
- filename2
- filename3
title2
- filename4
- filename5

[ Milos911 @ 18.11.2009. 16:40 ] @
Iz uzica si kao i ja pa moram da ti pomognem :):

Code:


$query1 = mysql_query("SELECT * FROM prva tabela");
while ($nesto1 = mysql_fetch_array($query1))
      {
       $id=$nesto1[0];
       $ime=$nesto1[2];
       echo $ime;
       
       $query2 = mysql_query("SELECT * FROM druga tabela WHERE id = '$id'");
       while ($nesto2 = mysql_fetch_array($query2))
               {
               echo $nesto[1];
               };
      };


Evo. Ovo je verovatno sporiji nacin od ovog sa left join ali je laksi za shvatanje. Imena varijabli su za 10 ali potrudi se i promeniu ona koja tebi odgovaraju. I to je to.

[Ovu poruku je menjao Gojko Vujovic dana 18.11.2009. u 22:16 GMT+1]
[ Tudfa @ 18.11.2009. 17:29 ] @
Citat:
zlatko: Hvala Stanko

pokushao sam da spojim tabele sa LEFT JOIN ali kao rezultat dobijam
title1 - filename1
title1 - filename2
title1 - filename3
title2 - filename4
title2 - filename5

Ovakav rezultat i treba da ti vrati taj JOIN...

@Milos911
Nije bas najbolja ideja da se rade svi ti SELECT upiti pored zivog JOIN-a (sta da mora da uradi 10000 upita ?), pa bi zato bila bolja ova logika:

- Izvrsis jedan upit sa tim LEFT JOIN-om koji ti je Stanko predlozio i dobijes ovo gore sto sam citirao i onda:

Code:

$arr_results = array();//ovo ce biti multidimenzionalni niz za cuvanje rezultata

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $arr_results[$row['title']][]=$row['filename'];
//elementi ovog niza su drugi nizovi. 
//kljucevi tih drugih nizova ce biti imena title-ova, a vrednosti unutar nizova ce biti stringovi koji ce predstavljati filename-ove
}

//i samo uradis ispis
foreach($arr_results as $title=>$filenames)
{
    echo $title.'<br>';
    
    foreach($filenames as $filename)
    {
        echo '-'.$filename.'<br>';
    }    
}


Inace, ovo je vise za PHP forum, al' ajd.

[Ovu poruku je menjao Tudfa dana 18.11.2009. u 18:40 GMT+1]
[ zlatko @ 18.11.2009. 18:05 ] @
Hvala puno obojici

Odgovara mi ovaj Miloshev predlog poshto nema mnogo upita. Svakako cu probati i taj tvoj.

Hvala josh jednom.
[ Milos911 @ 19.11.2009. 02:54 ] @
@tudfa pa da, rekoh da je onaj nacin sporiji, ali je mnogo laksi za shvatanje :) Ako pise neku malu skripticu razlika se nece primecivati, ali ako kao sto ti kazes bude imao gomilu upita ovaj nacin ne dolazi u obzir. Jer em je spor, em jede resurse.

@zlatko ako imas mnogo upita bolje ti je da uradis ono sto tudfa predlaze. Ja sam onaj primer napisao cisto da vidis kako bi mogao da uradis, jer onaj prvi primer nisi dobro razumeo. Znaci ja znam da je ovo moje lakse, ali nije bolje...
[ bogdan.kecman @ 24.11.2009. 07:05 ] @
zlatko, nema veze da li ima "mnogo" ili "malo" upita ... (u stvari je pitanje o broju slogova koji ce napraviti vise ili manje upita) .. treba da naucis kako se radi pravilno, a to je u ovom slucaju sa join (kako je Tudfa napisao) + ti je covek pokazao kako to da uradis koristeci php-ove mogucnosti da indexira niz stringom...
[ zlatko @ 12.04.2010. 16:58 ] @
Opet mi treba pomoć oko ovoga. :)

U tabelu "files" sam dodao red "date". Šta da izmenim na funkciji koju je Tudfa dao da bi mi rezultat bio:

title1
- filename1 - date1
- filename2 - date2
- filename3 - date3
title2
- filename4 - date4
- filename5 - date5