03. 09. 2009. | #1 |
novi član
Datum učlanjenja: 03.09.2009
Poruke: 3
Hvala: 0
0 "Hvala" u 0 poruka
|
prikaz svih vesti po kategorijama
imam jedan problem, i ne znam kako bih ga resio, a da to bude samo sa jednim upitom..
vesti uzimam iz baze, sa sve kategorijom u kojoj se nalaze: Kôd:
$vesti=$db->get_results("SELECT vesti.id, vesti.title, category.name as cname FROM vesti LEFT JOIN category ON category.id=vesti.cat_id"); Kôd:
Array ( [0] => stdClass Object ( [title] => Vest1 [id] => 1 [cat_id] => 1 [cname] => Kategorija1 ) [1] => stdClass Object ( [title] => Vest2 [id] => 2 [cat_id] => 1 [cname] => Kategorija1 ) [2] => stdClass Object ( [title] => Vest3 [id] => 3 [cat_id] => 2 [cname] => Kategorija2 ) [3] => stdClass Object ( [title] => Vest4 [id] => 3 [cat_id] => 2 [cname] => Kategorija2 ) Znaci ovako nesto da dobijem: Kôd:
<ul> <li>Kategorija 1 <ul> <li>Vest 1</li> <li>Vest 2</li> </ul> </li> <li>Kategorija 2 <ul> <li>Vest 3</li> <li>Vest 4</li> </ul> </li> </ul> |
03. 09. 2009. | #2 |
profesionalac
Qualified
Datum učlanjenja: 24.08.2009
Lokacija: Berlin
Poruke: 101
Hvala: 37
300 "Hvala" u 17 poruka
|
Ne znam dal sam dobro razumeo pitanje, ali evo odgovora kako bi mogao da "odradis".
U upitu stavis da ti sortira po id_cat, sada sledi ispis podataka, na pocetku stavis temp_cat = stdClass[0].cat_id i krenes u petlju za sve podatke, prilikom obrade sledeceg podatka pitas da li je temp_cat == stdClass[i].cat_id, ako jeste to znaci da je to jos jedna vest iz te kategorije, a ako nije jednako onda znaci da je nova kategorija. Kada predjes u novu kategoriju moras da postavis temp_cat = stdClass[i].cat_id. |
03. 09. 2009. | #3 |
profesionalac
Professional
Datum učlanjenja: 11.10.2006
Lokacija: beograd, srbija
Poruke: 271
Hvala: 32
10 "Hvala" u 7 poruka
|
ili kako eraser kaze, ili to prosto uradi sa vise protrcavanja kroz bazu, nagadjam da nemas ni 100 unosa za sada? nek imas i 1000, pa opet nije puno...
1) prosto protrci i pokupi sve kategorije, sortiraj po volji 2) foreach($cat ..) $cat['news'] = get_news($id_cat); ... right? :P ne kazem da je preterano pametno resenje, ali je brzo i efektno (pragmatichno) |
03. 09. 2009. | #4 |
Milan Cvejic
Wrote a book
|
@dootzky
Ne vidim razlog zasto bi za svaku vest ponovo pristupao bazi? Malo ne efikasno?
__________________
http://weevify.com |
03. 09. 2009. | #5 |
Goran Pilipović
Sir Write-a-Lot
|
možeš jednim querijem ali moraš malo da promuljaš niz koji dobiješ.
PHP kôd:
$kategorije = array ( [1] => array (vest 1, vest 2), [2] => array (vest 3, vest 4), );
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
03. 09. 2009. | #6 |
novi član
Datum učlanjenja: 03.09.2009
Poruke: 3
Hvala: 0
0 "Hvala" u 0 poruka
|
@bluesman
Probacu tako ako ne uspem na ovaj nacin sto je eraser predlozio.. Uglavnom sad uspevam nesto da uradim, ali problem je sto u petlji ne znam koji je prethodni element bio, tako da kada ispisem kategoriju, ako u njoj ima vesti onda se ne ispise prva vest, jer u tom prolazu ispisem samo naziv kategorije.. A akada ispisem i naziv vesti onda mi se brka ispis, zakomplikovao sam mnogo, vise ni sam ne znam gde gresim.. Kôd:
$temp_cat = $artikli[0]->cat_id; $open_cat=false; echo "<ul>\n"; echo "<li>" . $artikli[0]->cname ."\n"; foreach ($artikli as $a) { if ($temp_cat == $a->cat_id){ //iz iste kategorije if (!$open_cat) { $open_cat=true;}//otvara se kategorija echo "\t\t<li>$a->title</li>\n"; } else { //nova kategorija if ($open_cat){ echo "\t</ul>\n"; $open_cat=false;} //zatvara se kategorija $temp_cat=$a->cat_id; echo "</li>\n"; //zatvara se prethodni li echo "<li>$a->cname \n"; echo "\t<ul>\n"; echo "<li>$a->title</li> \n"; } } |
03. 09. 2009. | #7 |
novi član
Datum učlanjenja: 03.09.2009
Poruke: 3
Hvala: 0
0 "Hvala" u 0 poruka
|
bluesman resenje se pokazalo nekako najlakse, ali moraju(?!) 2 upita zbog praznih kategorija..
Kôd:
$vesti=$db->get_results("SELECT vesti.id, vesti.title, category.name as cname FROM vesti LEFT JOIN category ON category.id=vesti.cat_id"); $kategorije2=$db->get_results("SELECT category.id,category.title FROM category order by category.id asc"); $kategorije = array(); foreach ($vesti as $row) { if (!isset($kategorije[$row->cat_id])) { $kategorije[$row->cat_id] = array(); } $kategorije[$row->cat_id][] = $row; } //echo "<pre>"; print_r($kategorije); echo "</pre>"; die(); echo "<ul>\n"; foreach ($kategorije2 as $cat) { echo "<li>$cat->title\n"; if (!empty($kategorije[$cat->id])) { echo "\t<ul>\n"; foreach ($kategorije[$cat->id] as $a){ echo "\t\t<li>$a->title</li>\n"; } echo "\t</ul>\n"; } else { } echo "</li>\n"; } echo "</ul>\n"; |
03. 09. 2009. | #8 |
Goran Pilipović
Sir Write-a-Lot
|
Ček, hajde kada smo već krenuli sa ovim, da isteramo do kraja
Vrlo važno pitanje? Da li ti hoćeš da se listaju SVE kategorije ili samo one u kojima ima vesti? Od toga zavisi sve. Ovaj 2. query ti je nepotreban u bilo kom slučaju. Ako ćeš da listaš SVE kategorije, čak i one koje nemaju vesti, onda je najlakše da koristiš RIGHT JOIN kategorija, tako ćeš dobiti sve. Probaj: "SELECT vesti.id, vesti.title, category.name as cname FROM vesti RIGHT JOIN category ON category.id=vesti.cat_id" Trebalo bi da dobiješ ovako nešto Kôd:
id title cname 1 naslov 1 kategorija 38 2 naslov 2 kategorija 12 3 naslov 3 kategorija 99 null null kategorija 205 koja nema vesti null null kategorija 392 koja nema vesti I samo jedna napomena: mysql querije u foreach petlji izvršavaš isključivo pod pretnjom smrću.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Selektovanje odredjenih dana ali svih godina | Ivan | SQL baze podataka - Sponzor: Baze-Podataka.net | 7 | 10. 02. 2009. 16:23 |
Redirekcija svih strana na main page | Visitors | Regular expression i htaccess | 10 | 09. 01. 2008. 12:33 |
Potrebni .NET (C#) programeri svih nivoa | mvrbaski | Poslovne ponude i zapošljavanje | 0 | 21. 07. 2007. 12:44 |
kako iz utf8 enkodiranog stringa napraviti niz svih reči od bar 3 karaktera? | noviKorisnik | PHP | 4 | 09. 03. 2006. 00:58 |