[英]Php-Mysql-smarty getting datas from multiple tables
I have a problem. 我有个问题。 I can't solve it.
我解决不了 I am not good in PHP-MySQL.
我不太擅长PHP-MySQL。
I have three tables. 我有三张桌子。
First Table : linkss --> rows: linkid,link,orderlink 第一个表:链接->行:linkid,link,orderlink
Second Table: sublinkss1 --> rows: sublink1id,sublink1,ordersublink1,link,linkid 第二个表:sublinkss1->行:sublink1id,sublink1,ordersublink1,link,linkid
Third table : sublinkss2 --> rows: sublink2id,sublink2,ordersublink2,sublink1,sublink1id 第三张表: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);
and tpl file is this 和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>
For example some datas are stored in the database and I want output like this 例如一些数据存储在数据库中,我想要这样的输出
<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>
But these codes are not working properly. 但是这些代码无法正常工作。 I tried to use inner join and left join but I couldn't handle it.
我尝试使用内部联接和左联接,但无法处理。 Could you help me please.
请问你能帮帮我吗。
I think you'll need similar SQL-query as you wrote in your question. 我认为您将需要使用与问题中所写类似的SQL查询。 In this case you'll get similar lines:
在这种情况下,您将获得类似的行:
link1,sublink1,subsublink1
link1,sublink1,subsublink2
link1,sublink1,subsublink3
link1,sublink2,subsublink4
link1,sublink2,subsublink5
link1,sublink2,subsublink6
...
link2,sublink3,subsublink7
...
You can rearrange this result to smarty: 您可以将此结果重新排列为smarty:
current_link = ""; current_sublink = "";
desired_array = array();
foreach ($result as $r) {
$desired_array[$r["link"]]["sublinks"][$r["sublink1"]][] = $r["sublink2"];
}
If I wrote it correct your result will convert into array like this: 如果我写的没错,您的结果将转换为如下数组:
array(
"link1" => array(
"sublinks" => array(
"sublink1" => array("subsublink1","subsublink2",...),
"sublink2" => array("subsublink3","susbulink4",...),
...
)
),
"link2" => array(
// same as link1
)
)
If you've link which doesn't have sublink you'll need FROM link LEFT JOIN sublink1 ON ... LEFT JOIN sublink2 ON...
instead of FROM link,sublink1,sublink2
and you'll need a little modification in PHP-code. 如果您的链接没有子链接,则需要
FROM link LEFT JOIN sublink1 ON ... LEFT JOIN sublink2 ON...
代替FROM link,sublink1,sublink2
,您需要在PHP-中进行一些修改码。
In smarty: you'll need nested foreach
: 在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}
Maybe these codes aren't perfect but I think it's a good starting point (you can include check that count of sublink array isn't zero, etc.) 也许这些代码并不完美,但是我认为这是一个很好的起点(您可以包括检查子链接数组的计数不为零,等等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.