Php 使用SQL选择特定级别上的行
我有一个MySQL表,如下所示:Php 使用SQL选择特定级别上的行,php,mysql,sql,database,Php,Mysql,Sql,Database,我有一个MySQL表,如下所示: id | upperId | title -------+-----------+--------- 1 | 0 | World 2 | 1 | Europe 3 | 1 | Asia 4 | 2 | Germany 5 | 4 | Berlin ... 你明白了: 世界 欧洲 德国 柏林 亚洲 中国 北京 日本 现在,
id | upperId | title
-------+-----------+---------
1 | 0 | World
2 | 1 | Europe
3 | 1 | Asia
4 | 2 | Germany
5 | 4 | Berlin
...
你明白了:
世界
欧洲
德国
柏林
亚洲
中国
北京
日本
现在,我需要一个SQL查询来从区域中选择特定级别上的所有区域,比如第三个。在这个例子中,这将是德国、日本和中国。第二个层次是欧洲和亚洲
如果查询对于所有不同的级别都是灵活的,而不是特定于一个级别,则更好
是否有一种SQL方法可以做到这一点,或者我需要使用PHP或其他语言循环所有区域?对于特定级别,在本例中,第三个级别可以执行以下操作:
select l3.*
from region l1, region l2, region l3
where l1.upperId = 0
and l2.upperId = l1.id
and l3.upperId = l2.id
我假设您正在寻找通用解决方案。这里的要点是,您所做的是隐式地在树上进行递归搜索,据我所知,MySQL没有递归操作 因此,您必须自己在代码中使用递归或等效迭代 根据在项目中实现的内容,另一种解决方案可能是使用“普通”树而不是“普通”树。使用嵌套的集合数据结构,查询将引导您寻找适当的.lft和.grt值。简单方便
不幸的是,将表迁移到嵌套集结构并不简单。如果您的表已填充并处于生产状态,我想用PHP编写循环可能会快得多…可能是这样的吗?没有完全测试,但我认为它会工作
<?php
mysql_connect('localhost','root','yourpw');
mysql_select_db('db') or die (mysql_error());
$strSQL = "Select title FROM table";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$i = 0;
while($objResult = mysql_fetch_array($objQuery))
{
$i++;
$strSQL1 = "Select title FROM table Where upperId='".$i."'";
$objQuery1 = mysql_query($strSQL1) or die ("Error Query [".$strSQL1."]");
$objResult1 = mysql_fetch_array($objQuery1);
echo "<br>";
echo $objResult1["title"];
}
?>
我认为最好的办法是添加一个深度列。查询将更简单,执行速度更快。能否显示您的查询?导出查询结果。。。please@NullVoid对不起,你什么意思?我不知道怎么做,所以我想看看如何为它构建一个查询。一个简单的从tb1中选择title,upperId=2不是很有效吗?啊,我看到了混乱。我需要该级别上的所有行。我更新了示例。所以,不仅是欧洲下面的争吵,还有亚洲下面的争吵。谢谢!你会因为一些通用的东西而得到加分,例如,不特定于第三级