Count problem (MySQL, Smarty)


[quote=""]
<div class="kategorije-sadrzaj">
<a href="kat/{$sta.id}/{$sta.naziv|replace:' ':'-'|replace:'č':'c'|replace:'š':'s'|replace:'ć':'c'|replace:'ž':'z'|replace:'đ':'dj'|replace:'Š':'S'|replace:'Ć':'C'|replace:'Ž':'Z'|replace:'Đ':'Dj'|replace:'Č':'C'}/" class="crni_link">{$sta.naziv}</a> [{$ukupno}]
</div>
{/foreach}
[/quote]

Ali ne prebroji uopće, dok kad upišem u ovom drugom queryju WHERE kategorija='pa ovdje id neke kategorije' onda radi, a kad $a["id"] onda ne..

:/

I ovaj replace me nervira u Smartyju. Bilo bi ljepse kada bih to radio u PHP-u. Kako bih mogao da uradim replace (funkciju) neku i onda u link "includam" nekako funkciju tu...

:)

Ali ne prebroji uopće, dok kad upišem u ovom drugom queryju WHERE kategorija=‘pa ovdje id neke kategorije’ onda radi, a kad $a[“id”] onda ne…

:confused:

I ovaj replace me nervira u Smartyju. Bilo bi ljepse kada bih to radio u PHP-u. Kako bih mogao da uradim replace (funkciju) neku i onda u link “includam” nekako funkciju tu…

:slight_smile:

Nisam siguran što ti točno treba:[php]//Izbjegavaj asterisk* u MySQL-u
// X, Y, Z - samo stupci potrebni za ISPIS iz obje tablice
// $vanjski_podatak - nije potreban dodatan upit, ID se moze dobiti get/post mehanizmom
// ako ti treba nekakvo grupiranje i brojanje elemenata unutar svih kategorija, onda zanemari ovo :wink:
$upit = 'SELECT X, Y, Z
FROM kategorije
LEFT JOIN proizvodi ON proizvodi.kategorija = kategorije.id
WHERE kategorije.id = '.$vanjski_podatak.‘
ORDER BY naziv
ASC’;
$rezultat = mysql_query($upit) or die(‘hard’);
$kolicina = mysql_num_rows($rezultat);// ovo je broj rezultata upita[/php]Što se tiče zamjene znakova, pretraži forum - ima negdje i JS/PHP rješenje (koje nije smarty), i poslušaj što ti Sky kaže :wink:

EDIT:
$a[‘id’] je u tvom primjeru postalo dijelom niza $kategorije, i više mu na taj način ne možeš pristupiti.

Drugi query “ubije” prvog. Prema gornjem kodu, izvršiš prvi query s nekim query id-jem, kreneš u petlju, i unutar petlje (koja ustvari ovisi o prvom queriju) napraviš novi query koji pregazi prvi. Dakle, petlja će se izvršiti vjerojatno samo jednom i dalje ti neće brojati. Moraš imati dva link id-ja na bazu ili riješiti to nekako drugačije da bi mogao raditi query “unutar” querija. Posjeti
http://www.php.net/mysql_query
i pogledaj drugi parametar funkcije.

Ja sam sebi taj problem riješio pomoću objekata.

Što se tiče Smartija, prouči kako se rade modifieri. Napraviš svoj modifier (to je ustvari tvoja custom funkcija) i dalje ćeš moći napraviti sljedeće:


{$sta.naziv} [{$ukupno}]

{/foreach}
U mom slučaju, naziv funkcije koja će ti zamjeniti hrvatska slova se zove cro_ascii();

[size=4]Edit:
mamica, pretekao si me ;)[/size]

Ma nisi me skontao, sta mi treba. Vidi imam ovako:

Kategorije:

  • Kategorija 1 [BR. ukupno]
  • kategorija 2 [BR. ukupno]
  • Kategorija 3 [BR. ukupno]
  • Kategorija 4 [BR. ukupno]
  • Kategorija 5 [BR. ukupno]

I dodajem proizvode u te kategorije, i umjesto ovoga [BR. ukupno] zelim da pise broj unutar uglastih zagrada (broj koliko proizvoda ima). Kontas? Mogu ja to rjesiti kod dodavanja da selektujem i da idem +1, zatim kad brisem -1, ali ovako je prakticnije prebrojati. Isto tako cu i kod foruma, da ne dodajem +1 temu, +1 post, kad obrisem post -1 post, kad obrisem temu -1 tema, kad premjestim temu u drugi podforum da ne idem -1 tema u jednom podforumu a +1 u novi podforum itd, vec ovako mi je prakticnije, samo prebrojati.

Valjda si me skontao.

[size=4]Edit: Za mamicu.[/size]

Ahaa :)[php]
$upit=‘SELECT id FROM kategorije ORDER BY naziv ASC’;
$rezultat=mysql_query($upit) or die(‘harder’);
while($r = mysql_fetch_array($rezultat)){
$upit2='SELECT id FROM proizvodi WHERE kategorija = '.$r[‘id’];
$rezultat2=mysql_query($upit2) or die(‘yipee-kaa-yay’);
$broj=mysql_num_rows($rezultat2);
echo $broj;
}
[/php][size=4]Pisano iz glave al mislim da radi ;)[/size]

Zar mysql_num_rows() neće sporije izvršavati ako imam hiljade upisa u bazi? :slight_smile:

Konto sam ovakvu funkciju, samo moram nekako implementirati :slight_smile:

Nema frke: samo stavi u drugi upit ovo: SELECT COUNT(id) AS broj… i ispisuj ga kroz mysql_fetch_array kao $r2[‘broj’]

Zamjena slova je ovdje:
http://www.webmajstori.net/forum/showpost.php?p=134594&postcount=4

Edit: test brzine mysql_num_rows vs count:
http://www.coderprofile.com/content/public/forum/view_topic.php?topic_id=37

Prvo ću rješit ovo prebrojavanje, pa ću kasnije replace.

$ukupno_q = mysql_query("SELECT COUNT(id) AS cnt FROM proizvodi WHERE kategorija='$a[id]'");
$ukupno_a = mysql_fetch_assoc($ukupno_q);
$ukupno = $ukupno_a['cnt'];

i kad odem echo $ukupno dobro izgleda, i obrisem to i dodam:

$smarty->assign('ukupno', $ukupno);

a u TPL fajlu:

{foreach from=$kategorije item=sta}
<div class="kategorije-sadrzaj">
<a href="kat/{$sta.id}/{$sta.naziv|replace:' ':'-'|replace:'č':'c'|replace:'š':'s'|replace:'ć':'c'|replace:'ž':'z'|replace:'đ':'dj'|replace:'Š':'S'|replace:'Ć':'C'|replace:'Ž':'Z'|replace:'Đ':'Dj'|replace:'Č':'C'}/" class="crni_link">{$sta.naziv}</a> [{$ukupno}]
</div>
{/foreach}

I prikazuje mi svugdje izmedju [] zagrada “0”. Obrisem citav index.tpl i ostavim samo {$ukupno} pokazuje mi “0”, a kad odem
echo $ukupno." ";
prikazuje:

[quote=""]14 0 8 1 0[/quote] Negdje je greška tupava.

Napravio si<span class="syntaxdefault">$smarty</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">assign</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ukupno'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$ukupno</span><span class="syntaxkeyword">);&nbsp;</span><span class="syntaxdefault"></span>Što znači da je u template-u varijabla {$ukupno} broj i samo broj. Ako ispišeš na više mjesta, ili provučeš kroz petlju, naravno da će svugdje biti isti broj.

Išlo bi nekako ovako:
[size=4](Ovo je copy/paste koda iz prvog posta samo kao primjer rada sa Smartijem)[/size]

<span class="syntaxdefault">$index&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$kategorije&nbsp;</span><span class="syntaxkeyword">=&nbsp;array();<br /></span><span class="syntaxdefault">$query&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT&nbsp;*&nbsp;FROM&nbsp;kategorije&nbsp;ORDER&nbsp;by&nbsp;naziv&nbsp;ASC"</span><span class="syntaxkeyword">);<br />while(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">)){<br /><br />&nbsp;&nbsp;</span><span class="syntaxdefault">$kategorije</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$index</span><span class="syntaxkeyword">]&nbsp;=&nbsp;</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">;<br /><br />&nbsp;&nbsp;</span><span class="syntaxdefault">$broj&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT&nbsp;COUNT(*)&nbsp;AS&nbsp;cnt&nbsp;FROM&nbsp;proizvodi&nbsp;WHERE&nbsp;kategorija='</span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id'</span><span class="syntaxkeyword">]}</span><span class="syntaxstring">'&nbsp;ORDER&nbsp;by&nbsp;naziv&nbsp;ASC"</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;</span><span class="syntaxdefault">$prebroji&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">mysql_fetch_assoc</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$broj</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;</span><span class="syntaxdefault">$kategorije</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$index</span><span class="syntaxkeyword">++][</span><span class="syntaxstring">'ukupno'</span><span class="syntaxkeyword">]&nbsp;=&nbsp;</span><span class="syntaxdefault">$prebroji</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'cnt'</span><span class="syntaxkeyword">];<br />}<br /><br /></span><span class="syntaxdefault">$smarty</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">assign</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"kategorije"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$kategorije</span><span class="syntaxkeyword">);<br />&nbsp;</span><span class="syntaxdefault"></span>TPL datoteka:<span class="syntaxdefault"></span><span class="syntaxkeyword">{foreach&nbsp;</span><span class="syntaxdefault">from</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">$kategorije&nbsp;item</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">sta</span><span class="syntaxkeyword">}<br /><</span><span class="syntaxdefault">div&nbsp;</span><span class="syntaxkeyword">class=</span><span class="syntaxstring">"kategorije-sadrzaj"</span><span class="syntaxkeyword">><br /><</span><span class="syntaxdefault">a&nbsp;href</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"kat/</span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$sta</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">id</span><span class="syntaxkeyword">}</span><span class="syntaxstring">/</span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$sta</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">naziv</span><span class="syntaxkeyword">|</span><span class="syntaxdefault">moj_replace</span><span class="syntaxkeyword">}</span><span class="syntaxstring">/"&nbsp;</span><span class="syntaxkeyword">class=</span><span class="syntaxstring">"crni_link"</span><span class="syntaxkeyword">>{</span><span class="syntaxdefault">$sta</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">naziv</span><span class="syntaxkeyword">}</</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">>&nbsp;[{</span><span class="syntaxdefault">$sta</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">ukupno</span><span class="syntaxkeyword">}]<br /></</span><span class="syntaxdefault">div</span><span class="syntaxkeyword">><br />{/foreach}&nbsp;</span><span class="syntaxdefault"></span>Cilj je varijablu “ukupno” spremiti u niz zajedno s podacima o kategoriji. Tako će svakoj kategoriji biti “pridružen” taj broj i moći ćeš ga ispisati.

E super to radi. I to ovako:

Ali nece nesto drugo da mi prebroji, a to je:

A tpl:

Sve dobro prebroji ali ovako izgled:

Treba da bude:

cetri [0]
dva [0]
jedan [6]
pet [0]
sedam [2]
sest [3]
tri [0]

Ovako…

Smeta ovo [] i ispod [0] umjesto gdje je [] da pise odmah [0] … Ne vidim u cemu je problem :confused:

HVALA PUNO !

PS: Htio bih nauciti ovo, a ne gotovo rjesenje, sta znaci ovo

$index = “0”;
$kategorije[$index++][‘ukupno’] = $prebroji[‘cnt’];

:confused:

Trebalo dodati $index = “0”; i prije ovog querya:

$index = “0”;
$query = mysql_query(“SELECT * FROM proizvodjaci ORDER by naziv ASC”);
while($a=mysql_fetch_array($query)){

}

Rješeno. Hvala sky. Samo mozes li mi pojasniti ovo:

$proizvodjaci[$index++][‘ukupno’] = $prebroji[‘cnt’];

Vjerovatno da kad upisem $sta.ukupno da je to jednako $prebroji[cnt] ali ne kontam ovo $index++ dakle 0++ …

Nisam radio sa Smarty-jem (jedino sa CI) ali u PHP “nesto++” označuje povećanje za 1.

Pr:

Output: 50
Output: 0

Sada nisam siguran znači li to isto za Smarty, iako bi trebalo. Ako nije, neka me netko ispravi

Da, to je taj princip.

@Critical: pogledaj ovdje na WM ili na php.net što je to PHP increment operator.

Kako ste rijesili problem sa hrv slovima u url ? Ako neko zna molio bih da pogleda
http://www.webmajstori.net/forum/showthread.php?t=30445


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja