我在網站上有這個奇怪的代碼。它獲取所有記錄(由pozycja命令),然後創建某種堆棧並將顯示的記錄限制爲10.但是,如果有超過200條記錄,則需要太長時間,因爲它正在處理整個表格,而不是10個。通過創建高級SQL查詢優化頁面處理
值使用:
$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;
}
這是一個很大的混亂,我認爲有辦法讓它吸塵器SQL連接。
感謝您的幫助!
更新:
我想設置產品在相應類別/子/ subsubcategory(這是主要類別的功能)在特定的順序。它就像堆棧一樣,因爲每個產品在特定的子類別中只有它的位置。子類別在子類別中具有位置,在類別中具有子類別。
所以看起來:
類別
- 子類別2(位置1)
- subsubcategory 6(位置1)
---產物11(位置1)
---產品7(位置2)
- subsubcategory 3(位置2) ---產物3(位置1)
---產物2(位置1)
等等「pozycja」字段是位置,元素之後的數字是它的id。所以現在我必須循環遍歷元素,然後設置堆棧並僅返回一塊。
DB名稱:panelepo_sweb
將非常有用,如果您描述您的代碼中使用的每個表,並且您嘗試實現。 – 2010-08-24 13:34:47