Witam (IMG:
style_emoticons/default/smile.gif)
Mam do Was pewną prośbę, jako, iż nie jestem masterem w optymalizacji kodu, prosiłbym o najwydajniejsze rozwiązanie możliwego problemu, nawet w zmianie zapytania sql (IMG:
style_emoticons/default/smile.gif)
Poniżej kawałek mojego kodu:
<?php
function generate_katalog_list() {
$katalog_list = sql_cache('get', 'katalog_list');
$subkatalog_list = sql_cache('get', 'subkatalog_list');
if(!$katalog_list) {
$sql = "
SELECT
k.katalog_id,
k.katalog_name,
COUNT(p.produkt_id) AS katalog_productnum
FROM
" . DB_KATALOG . " k,
" . DB_PRODUKT . " p
WHERE
p.katalog_id = k.katalog_id
ORDER BY
k.katalog_name ASC
";
$result = $db->sql_query($sql);
$katalog_list = $db->sql_fetchrowset($result);
$id_list = implode(',', $katalog_list);
$sql = "
SELECT
k.katalog_id,
k.katalog_name,
k.parent_id
COUNT(p.produkt_id) AS katalog_productnum
FROM
" . DB_KATALOG . " k,
" . DB_PRODUKT . " p
WHERE
p.katalog_id = k.katalog_id
AND k.parent_id IN ($id_list)
ORDER BY
k.katalog_name ASC
";
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result)) {
$subkatalog_list[$row['parent_id']][]['id'] = $row['katalog_id'];
$subkatalog_list[$row['parent_id']][]['name'] = $row['katalog_name']; // te 3 zmienne zrobione 'na pałkę', kod i tak pisany na szybko :)
$subkatalog_list[$row['parent_id']][]['pnum'] = $row['katalog_productnum'];
}
sql_cache('write', 'katalog_list', $katalog_list);
sql_cache('write', 'subkatalog_list', $subkatalog_list);
}
foreach($katalog_list as $id => $val) {
///////////////////
$katalog_id = $val['katalog_id'];
$katalog_name = $val['katalog_name'];
$katalog_productnum = $val['katalog_productnum'];
////////////////////// wyrzucenie do templatki
if(isset($subkatalog_list[$katalog_id])) { for($i = 0; $i < count($subkatalog_list[$katalog_id]); $i++) { $subkatalog_id = $subkatalog_list[$katalog_id][$i]['id'];
$subkatalog_name = $subkatalog_list[$katalog_id][$i]['name'];
$subkatalog_productnum = $subkatalog_list[$katalog_id][$i]['katalog_productnum'];
////////////////////// wyrzucenie do templatki
}
}
}
}
?>
Proszę się nie przejmować głupotami w stylu. tworzenie cache do subkatalogów np. przy braku katalogów, kod pisałem na szybko, aby przede wszystkim przedstawić problem, skoro i tak stoję teraz w miejscu (IMG:
style_emoticons/default/smile.gif)
Problem polega na tym, że wiem, że nie jest to dobre rozwiązanie, nie wiem nawet czy zadziała, ale liczę na Was, że mi pomożecie (IMG:
style_emoticons/default/smile.gif)
Moim celem w tej funkcji jest, aby pod koniec uzyskać pętle, na której będę mógł wypisać katalogi, w której też będę mógł zamieścić następną pętlę z subkatalogami (IMG:
style_emoticons/default/smile.gif)
Ten post edytował kam821 22.12.2009, 20:53:34