我的导航有问题。 我有 2 级导航:
- super 类别
- 类别
我的 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_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
此代码加载页面的时间太长。我需要在 1 个查询中添加所有这些代码。我怎样才能做到这一点?
最佳答案
如果代码加载时间太长,那么我认为您应该查看每个查询的性能。是的,您可以通过 JOIN
将这些查询合并为一个,但如果您没有正确的索引,则可能仍然需要很长时间。我认为您应该首先在语句前面使用 EXPLAIN
运行每个查询,以确保您的表已正确索引。
如果它们索引正确,那么这里是一个代码示例(不幸的是,这是一个最好的猜测。您应该分享您的表结构以及表与其自身的关系。使用 sqlfiddle.com 加载示例数据并分享您的内容最终结果集应该如下所示。我也不明白 2 级导航如何需要 3 个 JOIN):
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
关于PHP + MySQL 导航 : How to load 2 levels in 1 query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121778/