1

私は問題があります。私はそれを解決することはできません。私はPHP-MySQLが苦手です。

私は3つのテーブルを持っています。

最初のテーブル: リンク --> 行: リンク ID、リンク、オーダーリンク

2 番目のテーブル: sublinkss1 --> 行: sublink1id,sublink1,ordersublink1,link,linkid

3 番目のテーブル: sublinkss2 --> 行: sublink2id,sublink2,ordersublink2,sublink1,sublink1id

 $get_data=mysql_query("select linkss.link, sublinkss1.sublink1, sublinkss2.sublink2 from linkss,sublinkss1, sublinkss2 where sublinkss1.linkid=linkss.linkid and sublinkss2.sublink1id=sublinkss1.sublink1id order by orderlink, ordersublink1, ordersublink2");
 while ($row=mysql_fetch_assoc($get_data)) {
    $data[$row["link"]][$row["sublink1"]][$row["sublink2"]]=array($row["link"],$row["sublink1"],$row["sublink2"]);        
    }          
    $smarty = new Smarty();        
    $smarty->assign('data',$data);

そしてtplファイルはこれです

<ul>
{foreach key=link from=$data item=linkss}
<li><a href="#">{$link}</a>
<ul>
{foreach key=sublink1 item=sublinkss1 from=$linkss }
<li><a href="#">
{$sublink1}
</a>

<ul>
{foreach key=sublink2 item=sublinkss2 from=$sublinkss1 }
<li><a href="#">
{$sublink2}
</a>

</li>
{/foreach}
</ul>

</li>
{/foreach}
</ul>

</li>
{/foreach}
</ul>

たとえば、いくつかのデータがデータベースに保存されており、このような出力が必要です

<ul>
<li>Home Page
<ul><li>Projects</li></ul>
</li>
<li>About Us
<ul><li>History</li></ul>
<ul><li>Products
<ul><li>Product1</li></ul>
<ul><li>Product2</li></ul>
<ul><li>Product3</li></ul>
</li></ul>
</li>
<li>Contact Us</li>
</ul>

しかし、これらのコードは正しく機能していません。内部結合と左結合を使用しようとしましたが、処理できませんでした。私を手伝ってくれますか。

4

1 に答える 1

0

質問に書いたのと同様の SQL クエリが必要になると思います。この場合、同様の行が表示されます。

link1,sublink1,subsublink1
link1,sublink1,subsublink2
link1,sublink1,subsublink3
link1,sublink2,subsublink4
link1,sublink2,subsublink5
link1,sublink2,subsublink6
...
link2,sublink3,subsublink7
...

この結果を smarty に並べ替えることができます。

current_link = ""; current_sublink = "";
desired_array = array();
foreach ($result as $r) {
    $desired_array[$r["link"]]["sublinks"][$r["sublink1"]][] = $r["sublink2"]; 
}

私が正しく書いた場合、結果は次のように配列に変換されます。

array(
    "link1" => array(
         "sublinks" => array(
              "sublink1" => array("subsublink1","subsublink2",...),
              "sublink2" => array("subsublink3","susbulink4",...),
              ...
         )
    ),
    "link2" => array(
         // same as link1
    )
)

サブリンクのないリンクがある場合は、FROM link LEFT JOIN sublink1 ON ... LEFT JOIN sublink2 ON...代わりにサブリンクが必要にFROM link,sublink1,sublink2なり、PHP コードを少し変更する必要があります。

smarty: では、ネストされたものが必要ですforeach:

<ul>
{foreach from=$desired_array key=link item=link_item}
   <li>{$link}
       <ul>
       {foreach from=$link_item["sublinks"] key=sublink1 item=sublink_item}
          <li>{$sublink1}
          <ul>
          {foreach from=$sublink item=sublink_item2}
             <li>{$sublink_item2}</li>
          {/foreach}
          </ul></li>
       {/foreach}
       </ul>
   </il>
 {/foreach}

これらのコードは完璧ではないかもしれませんが、良い出発点だと思います (サブリンク配列のカウントがゼロでないことのチェックなどを含めることができます)。

于 2012-08-05T08:33:14.797 に答える