Gelişmiş SQL sorgusu oluşturarak sayfa işleme optimizasyonu

0 Cevap php

Ben sitede bu garip kodu var. Daha sonra bu yığının çeşit oluşturur ve sınırları 10 kayıtları gösterilen, tüm kayıtları (pozycja tarafindan) alır. 200 kayıtları üzerinden varsa bu tüm tabloyu işleme çünkü Ancak, 10 yerine, çok uzun sürüyor.

Kullanılan değerler:

$int_ilosc_na_strone = 10;
$liczba_wierszy = 200;
Podzial_na_podstrony::get_limit_object($int_ilosc, $int_ilosc_na_strone) = 10;
$order = NULL;


public function produkty_kat($adres, $liczba_wierszy, $int_ilosc_na_strone) {
        require_once('lib/Podzial_na_podstrony.class.php');

        $rozloz = explode("/", $adres);
        $id = $rozloz[2];

        $order = $this->podaj_order($adres, 'kategorie');
        if (empty($order)) {
            $order = 'produkty.pozycja ASC';
        }
        if ($order=='price') {
            $order = "produkty.cena ASC";
        }
            $firstack = $this->database->pobierz("SELECT id FROM subkategorie WHERE kategorie_id = '$id' ORDER BY pozycja");
            foreach($firstack as $firstack)
            {
                $stack = $this->database->pobierz("SELECT id FROM sub_subkategorie WHERE subkategorie_id = '{$firstack['id']}' ORDER BY pozycja");
                foreach($stack as $stack)
                {
                    $prods[] = $this->database->pobierz("SELECT produkty.id FROM produkty, przyporzadkowania, stany_magazynowe, gk_grupy_produkty WHERE stany_magazynowe.produkty_id=produkty.id AND produkty.id=przyporzadkowania.produkty_id AND przyporzadkowania.sub_subkategorie_id={$stack['id']} AND produkty.widoczny='1' AND produkty.id = gk_grupy_produkty.id_produktu AND gk_grupy_produkty.id_grupy=$this->int_id_grupy AND gk_grupy_produkty.towar_widocznosc=1 GROUP BY produkty.pozycja ORDER BY $order");
                }
                $temp = array();
                foreach($prods as $o)
                {
                    foreach($o as $o)
                    {
                        $temp[] = $o;
                    }
                }
            }
            $temp2 = array();
            foreach($temp as $o)
            {
                $temp2[] = $o;
            }
            $wynik = $temp2;

            $int_ilosc = count($wynik);
            $this->int_liczba_wierszy = $int_ilosc;
            $obj_limit = null;
            if ($int_ilosc_na_strone > 0) {
                $obj_limit = Podzial_na_podstrony::get_limit_object($int_ilosc, $int_ilosc_na_strone);
            }
            $temp = array();
            $c = 0;
            foreach($wynik as $v)
            {
                if(is_object($obj_limit))
                {
                    if($c >= $obj_limit->min && $c < ($obj_limit->min + $obj_limit->max))
                    {
                        $temp[] = $v;
                    }
                    else if($c == ($obj_limit->min + $obj_limit->max))
                    {
                        break;
                    }
                }
                else
                {
                    $temp = $wynik;
                    break;
                }
                $c++;
            }
            $paged = $temp;
        return $paged;
    }

Bu büyük bir karmaşa var, ve ben SQL katılır ile daha temiz yapmak için bir yolu var olduğunu düşünüyorum.

Yardımın için teşekkürler!

Güncelleme:

Ben belirli bir düzen içinde (bu ana kategoriler için işlevdir) kategorisi / alt kategori / subsubcategory gelen ürünler ayarlamak istiyorum. Bu yığını gibi oluyor, her ürünün belirli subsubcategory içeride sadece kendi konumunu vardır çünkü. Subsubcategories kategoride alt kategoriler, alt kategoriler pozisyon var.

Yani gibi görünüyor:

category
- subcategory 2 (position 1)
-- subsubcategory 6 (position 1)
--- product 11 (position 1)
--- product 7 (position 2)
-- subsubcategory 3 (position 2) --- product 3 (position 1)
--- product 2 (position 1)

Vb "pozycja" alan konumu ve eleman sonra sayı sağ onun kimliğidir. Yani şimdi ben elemanları döngü var, o yığını ayarlamak ve tek parça dönün.

DB adı: panelepo_sweb

0 Cevap