Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MySQL - kategorije i podkategorije za Article management

[es] :: MySQL :: MySQL - kategorije i podkategorije za Article management

[ Pregleda: 1990 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

boccio
Boris Krstović
Spoonlabs.com
nbgd

Član broj: 7594
Poruke: 2458
*.ptt.yu

Sajt: bocc.io


+771 Profil

icon MySQL - kategorije i podkategorije za Article management19.02.2004. u 21:37 - pre 244 meseci
Imam ovakvu situaciju:
2 tabele - kategorije i članci. Ispis treba da bude ovakav:
------------------
Kategorija_1
(ukupno xx članaka u kategoriji)

Kategorija_2
(ukupno...)
-----------------
I to radim sa query-jem
Code:

SELECT c.category, c.id, COUNT(a.id) AS ArticleNumber 
FROM tblCategories c 
LEFT JOIN tblArticles a ON c.id=a.category_id 
GROUP BY c.category
ORDER BY c.id

Stvar fercera...e, sad treba da ubacim podkategorije. Output bi trebalo da bude u stilu
------------------
Kategorija_1
pokategorija_1, podkategorija_2
(ukupno xx članaka u svim zbirnim podkategorijama)

Kategorija_2
podkategorija....
(...)
-----------------

Ja ne bih uvodio tabelu podkategorije, već bih išao na varijantu parent_category_id polja u tabeli kategorija.

Ono što mi je problem je kako da modifikujem gornji query da bih dobio output kakav želim uz što manju modifikaciju koda? pokušao sam da u osnovni query ubacim nešto tipa (...) WHERE parent_category_id = '$current_cat_id' (...), pa da u rekurzivnoj f-ji iteriram kroz sve "glavne" kategorije prosleđujući $current_cat_id, ali sam zabrljao... ne znam kako da dobijem mysql_query oblika koji zelim (cat_1, sub_1_1, sub_1_2, cat_2, sub_2_1, cat_3, sub_3_1, etc...)

jel ima neko nekakvo elegantno rešenje za ovo, da ne uvodim novu tabelu?

thx
Jeff, one day you’ll understand that it’s harder to be kind than clever.
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.bankmeridian.com

Sajt: www.novikorisnik.net


+5 Profil

icon Re: MySQL - kategorije i podkategorije za Article management20.02.2004. u 10:13 - pre 244 meseci
Samo dodaj to polje "parent_category_id" u tabelu i dodaj da se traži u selektu:

SELECT c.category, c.id, c.parent_category_id, COUNT(a.id) AS ArticleNumber...

i eventualno ga daš kao kriterijum sortiranja:

... ORDER BY c.parent_category_id, c.id

Priprema podataka za ispis na način koji želiš možda nije baš linearna ali ne deluje ni neizvodljivo.

Sve se utrpa u višedimenzionalni niz
Code:
$q = mysql_query ("SELECT ...");
$arrr = array ();

while ($r = mysql_fetch_assoc ($q))
{
  $parent_id = $r ['parent_category_id'];
  unset ($r ['parent_category_id']);
  if (!array_key_exists ($parent_id, $arrr))
    $arrr [$parent_id] = array ();
  array_push ($arrr [$parent_id], $r);
}

... i tu je jedna lepa rekurzija
Code:
function lepa ($parent_id)
{
  if (!array_key_exists ($parent_id, $GLOBALS ['arrr']))
    return false;
  $cat_list = '';
  $number = 0;
  foreach ($GLOBALS ['arr'] [$parent_id] as $cat)
  {
    $cat_list .= ($cat_list != '' ? ', ' : '') . $cat ['category'];
    $number += $cat ['ArticleNumber'];
    $subcat = lepa ($cat ['id']);
    if ($subcat !== false)
    {
      $cat_list .= " ({$subcat['cat_list']})";
      $number += $subcat ['number'];
    }
  }
  return compact ('cat_list', 'number');
}

Ako korenske kategorije imaju "parent_category_id" jednaku nuli
Code:

foreach ($arr [0] as $cat)
{
  echo "<p>{$cat['category']}<br />\r\n";
  $number = $cat ['ArticleNumber'];
  $subcat = lepa ($cat ['id']);
  if ($subcat !== false)
  {
    echo "{$subcat['cat_list']}<br />\r\n";
    $number += $subcat ['number'];
  }
  echo "(ukupno $number članaka)</p>\r\n";
}


 
Odgovor na temu

boccio
Boris Krstović
Spoonlabs.com
nbgd

Član broj: 7594
Poruke: 2458
*.ptt.yu

Sajt: bocc.io


+771 Profil

icon Re: MySQL - kategorije i podkategorije za Article management20.02.2004. u 17:28 - pre 244 meseci
da, to je to... :))))

svaka cast, puno si mi pomogao...samo mi jos reci na koju adresu da posaljem gajbu piva :)


Jeff, one day you’ll understand that it’s harder to be kind than clever.
 
Odgovor na temu

[es] :: MySQL :: MySQL - kategorije i podkategorije za Article management

[ Pregleda: 1990 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.