gpt4 book ai didi

php-Mysql-smarty 获取多表数据

转载 作者:行者123 更新时间:2023-11-30 23:28:40 25 4
gpt4 key购买 nike

我有一个问题。我无法解决它。我不擅长 PHP-MySQL。

我有三个表。

第一个表:linkss --> 行:linkid,link,orderlink

第二个表:sublinkss1 --> 行:sublink1id,sublink1,ordersublink1,link,linkid

第三个表: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>

但是这些代码不能正常工作。我尝试使用 inner join 和 left join 但我无法处理它。你能帮帮我吗?

最佳答案

我认为您将需要与您在问题中所写的类似的 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}

也许这些代码并不完美,但我认为这是一个很好的起点(您可以包括检查子链接数组的计数是否不为零等)

关于php-Mysql-smarty 获取多表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11808513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com