1

そのため、個々のアイテムのスコアに応じてデータを再配置できるようにしたいことを除いて、データを希望どおりに出力できました。だから今、私は次のようなものを出力します:

<ol>
 Item1
    <ol>
     subitem1A
        <ol>
         subsubitem1A
        </ol>
    </ol>
    <ol>
     subitem1B
    </ol>
</ol>
<ol>
 Item2
</ol>

左と右の値を配列に入れ、それを反復することでそれを取得します。左の値なら出し、右の値<ol>itemならで閉じる</ol>

上記の例を使用して、私がやりたいことはItem2、スコアが よりも優れている場合Item1Item2が最初になりItem1、そのすべての子がその後になります。subitem1Bのスコアが よりも優れている場合はsubitem1Asubitem1Bsubitem1Aとそのすべての子になります。

出力用の変数にすべてのhtmlを入れるループを実行する前に、DBクエリで何かをする必要があるかどうかはわかりませんが、何らかの方法で出力を確認できるかどうかを考えていました<ol>親の直接の子であるすべて<ol>。したがって、subitem1Aその親を見て、その親が見つかった場合は、parentを持つ人をItem1探し、スコアを確認してから、それに応じて注文します。それが可能かどうかはわかりませんが、それが私の思考プロセスでした。<ol>Item1

編集 - 要求に応じてさらに情報を追加します。

私はこのクエリを行います:

$sql = "SELECT * FROM table WHERE uCId = '$uCId' AND lft BETWEEN 2 AND '$max' ORDER BY lft ASC";
$result = mysql_query($sql);

それで:

$ol = array();
$html = "";
while ($row = mysql_fetch_array($result)) {          
        $ol[$row['lft']] = array('type'=>'open',
                                    'text'=>$row['text']
                                    //and more stuff like score, date, etc 
                                    );
        $ol[$row['rgt']]  = array('type'=>'close');
    }
$olCount = count($ol);
for ($d=2; $d<=$olCount; $d++) {
        if ($ol[$d]['type'] == 'open') {
            $html.= '<ol>various html'.$ol[$d]['text'].'various html';
                    }else{
                          $html .= '</ol>';
                    }

基本的に、読みにくくするだけの html をいくつか省略しました。スコアは、必要な場所に配置できます。の ID<ol>はスコアでも何でもかまいません。何でもうまくいきます。

4

0 に答える 0