Bir dizi döngünün içine bir süre sql sorgu döngü nasıl değiştireceğinizi

3 Cevap php

benim web sorgu sayısını kaydetmek ve sayfa altında komut dosyası çalıştırıldığında, 40 ekstra sorguları sayfasına eklendi.

nasıl bir screensize ve hafif birine bu sql bağlantısını değiştirebilirsiniz

    function tree_set($index)
    {
        //global $menu; Remove this.
        $q=mysql_query("select id,name,parent from cats where parent='$index'");
        if(mysql_num_rows($q) === 0)
        {
            return;
        }

        // User $tree instead of the $menu global as this way there shouldn't be any data duplication
        $tree = $index > 0 ? '<ul>' : ''; // If we are on index 0 then we don't need the enclosing ul
        while($arr=mysql_fetch_assoc($q))
        {
            $subFileCount=mysql_query("select id,name,parent from cats where parent='{$arr['id']}'");
            if(mysql_num_rows($subFileCount) > 0)
            {
                $class = 'folder';
            }
            else
            {
                $class = 'file';
            }

            $tree .= '<li>';
            $tree .= '<span class="'.$class.'">'.$arr['name'].'</span>';
            $tree .=tree_set("".$arr['id']."");
            $tree .= '</li>'."\n";
        }
        $tree .= $index > 0 ? '</ul>' : ''; // If we are on index 0 then we don't need the enclosing ul

        return $tree;
    }

//variable $menu must be defined before the function call
$menu = '....<ul id="browser" class="filetree">'."\n";
$menu .= tree_set(0);
$menu .= '</ul>';

echo $menu;

ben duydum, bu bir diziye değiştirerek yapılabilir, ama ben bunu nasıl bilmiyorum

şimdiden teşekkürler

3 Cevap

Bu (denenmemiş kodu) deneyin:

function tree_set($index)
{
    //global $menu; Remove this.
    $q=mysql_query("select id,name,parent from cats where parent='$index'");
    if(mysql_num_rows($q) === 0)
        return;

    $cats = array();
    $cat_ids = array();

    while($arr=mysql_fetch_assoc($q))
    {
       $id = intval($arr['id']);
       $cats[$id] = $arr;
    }

    $subFilesCountQuery="select parent,count(*) as subFileCount from cats where parent=".
                   join(" OR parent=",array_keys($cats))." GROUP BY parent";

    $subFileCountResult=mysql_query($subFilesCountQuery);

    while($arr=mysql_fetch_assoc($subFileCountResult))
    {
       $id = intval($arr['parent']);
       $cats[$id]['subFileCount'] = $arr['subFileCount'];
    }

    // If we are on index 0 then we don't need the enclosing ul
    $tree = $index > 0 ? '<ul>' : ''; 
    foreach($cats as $id => $cat)
    {
        if($cat['subFileCount'] > 0)
            $class = 'folder';
        else
            $class = 'file';

        $tree .= '<li>';
        $tree .= '<span class="'.$class.'">'.$arr['name'].'</span>';
        $tree .=tree_set("".$arr['id']."");
        $tree .= '</li>'."\n";
    }
    $tree .= $index > 0 ? '</ul>' : '';

Bir tek hamlede tüm alt kategori sayıları almak için ikinci bir sorgularının ardından tüm kategoriler (orijinal ilk sorgu) almak için: Ne yapıyorum iki sorgularını. Ben de bir dizideki tüm kategorilerini depolamak olduğum sen daha çok veritabanından almak gibi görüntülemek yerine, döngü olabilir.

Bu bir diziye üzerinden veri kopyalama ve bu kopyayı kullanarak yapılabilir: ie

while($arr=mysql_fetch_assoc($q))
    {
        $results[] = $arr;
    }

daha sonra, o zaman dolar sonuçları istiyorsun ne op

Kodunuzu ana sorun SQL sorgusu ile tüm ekran mantığı karıştırma olmasıdır.

"Select id, adı, kediden ebeveyn" gibi tek bir sorguda bütün ağaç seçin. Kendi ağacını temsil edecek PHP dizi oluşturmak, sonucu yineleme, daha sonra kaynak olarak dizi kullanarak HTML çizmek