PHP+MySQL导航:如何在一个查询中加载两个级别?
我的导航有问题。 我有两个级别的导航: 超类 类别 我对SQL命令有问题。现在我有一些类似的:PHP+MySQL导航:如何在一个查询中加载两个级别?,php,mysql,sql,Php,Mysql,Sql,我的导航有问题。 我有两个级别的导航: 超类 类别 我对SQL命令有问题。现在我有一些类似的: $laveMenu_query1 = $mysqli->query("SELECT DISTINCT HlavnaKategoria FROM it_navigacia WHERE HlavnaKategoria != 'x' ORDER BY poradie"); while($laveMenu_result1 = mysqli_fetch_array($laveMenu_query1))
$laveMenu_query1 = $mysqli->query("SELECT DISTINCT HlavnaKategoria FROM it_navigacia WHERE HlavnaKategoria != 'x' ORDER BY poradie");
while($laveMenu_result1 = mysqli_fetch_array($laveMenu_query1)) {
$lavemenu_navigacia1 = $laveMenu_result1['HlavnaKategoria'];
echo "<li class=\"sliding-element\"><a><h3>$lavemenu_navigacia1</h3></a>";
$lavemenu_query2 = $mysqli->query("SELECT DISTINCT Kategoria FROM it_navigacia WHERE HlavnaKategoria = '$lavemenu_navigacia1'");
echo "<ul>";
while($lavemenu_result2 = mysqli_fetch_array($lavemenu_query2)) {
$lavemenu_navigacia2 = $lavemenu_result2['Kategoria'];
$lavemenu_odkaz2 = $mysqli->query("SELECT * FROM it_navigacia WHERE Kategoria = '$lavemenu_navigacia2' AND HlavnaKategoria = '$lavemenu_navigacia1'");
while($lavemenu_odkaz2_result = mysqli_fetch_array($lavemenu_odkaz2)) {
$odkaz2_1 = $lavemenu_odkaz2_result['KategoriaURL'];
$odkaz2_2 .= $lavemenu_odkaz2_result['Url'].",";
}
if($Kategoria==$odkaz2_1) {
echo "<li class=\"sliding-element\"><a href=\"/$odkaz2_1.html\" class=\"active\">» $lavemenu_navigacia2</a></li>";
} else {
echo "<li class=\"sliding-element\"><a href=\"/$odkaz2_1.html\">» $lavemenu_navigacia2</a></li>";
}
$odkaz2_1 = "";
$odkaz2_2 = "";
}
echo "</ul>";
$odkaz_array = "";
$odkaz = "";
echo "</li>";
} // level 1
此代码在加载页面时过长。我需要在一个查询中添加所有这些代码。如何实现这一点?如果代码加载时间过长,那么我认为您应该查看每个查询的性能。是的,您可以通过连接将这些查询合并为一个查询,但是如果没有正确的索引,则可能需要花费很长时间。我认为您应该首先使用前面的EXPLAIN语句运行这些查询,以确保表被适当地索引 如果它们的索引正确,那么下面是一个代码示例,不幸的是,这是一个最好的猜测。您应该共享您的表结构以及表与自身的关系。使用sqlfiddle.com加载示例数据并共享最终结果集的外观。我也不明白2级导航如何需要3个连接:
SELECT DISTINCT t1.HlavnaKategoria AS t1HlavnaKategoria, t2Kategoria AS t2.Kategoria , t3.*
FROM it_navigacia AS t1
JOIN it_navigacia AS t2
ON t2.HlavnaKategoria = t1.HlavnaKategoria
JOIN it_navigacia AS t3
ON t3.Kategoria = t2.Kategoria
AND t3.HlavnaKategoria = t1.HlavnaKategoria
WHERE t1.HlavnaKategoria != 'x'
ORDER BY t1.poradie
是的,我有索引表。我在PHPMyAdmin mariaDB中测试了这个查询,并在第1行显示错误:-使用数据和表结构加载sqlfiddle.com