2017-09-16 60 views
-1

所需的结果,我有具有SQL数据库两列 1. ID和2 PARENT_ID获得SQL

我想选择其中PARENT_ID = 1 [让结果保存在X数组]然后所有ID, 选择X []中的parent_id [让结果保存在Y数组中]的所有ID,然后...做相同的高达7个级别,最后我想对所有级别进行求和并以变量名“数字”得到该总和

我的尝试:

$sql = "SELECT count(id) as leadersearch FROM `$database`.`$mem` where parent_id = ".$parent[id]; 
$result = mysqli_query($con, $sql); 
$lv1 = mysqli_fetch_array($result); 

然后再

$sql = "SELECT count(id) as leadersearch FROM `$database`.`$mem` where parent_id in ($lv1)"; 
$result = mysqli_query($con, $sql); 
$lv2 = mysqli_fetch_array($result); 

等等....它可以给我需要的结果,但它是太多的代码... 我想同样通过循环还是其他什么东西......缩短代码。

+2

*“但代码太多”* - 定义“代码太多”;我在这里看不到太多的代码。 –

+0

@ Fred-ii-我的意思是我必须粘贴相同的三条线7次,但我想要做一个循环 –

+0

Ddin't你已经问过类似这里https://stackoverflow.com/q/46215054/ –

回答

0

您的第一个查询获取count(id),然后第二个查询使用它来获取结果。看起来你的需求有很多缺陷。

但是,对于你的问题,你可以使用子查询类似以下

$sql = "SELECT count(id) as leadersearch 
FROM `$database`.`$mem` 
WHERE parent_id in (
     SELECT id FROM `$database`.`$mem` where parent_id = ".$parent['id']." 
)"; 
$result = mysqli_query($con, $sql); 
$lv2 = mysqli_fetch_array($result); 

如果你有很多级别嵌套和你要搜索这样的记录,那么你可以考虑功能:

function getLeader($parent_id){ 
    $results = []; 
    $sql = "SELECT id as leadersearch FROM `$database`.`$mem` where parent_id in (".$parent_id.")"; 
    $result = mysqli_query($con, $sql); 

    foreach($row = mysqli_fetch_array($result)){ 
     $results[] = $row['id']; 
    } 

    return $results; 
} 

$leaders = []; 
$ids = getLeader($parent['id']); 
foreach($ids as $id){ 
    $leaders[$id] = getLeader($id); 
} 
+0

我说我必须做到这一点高达7级意味着第一个结果,然后用它来获得第二个结果,然后使用第二个结果获得第三个结果,然后使用第三个结果获得第四个结果。我需要去第七个结果...所以我想用循环做 –

+0

@RajanSinghSood。 。我已经更新了我的答案。 。解决了你面临的问题? –

+0

它工作到2级,但是当我试图使用$领导的foreach循环['$ id']它说 警告:C:\ xampp \ htdocs \ delta \ admin \ process \ test.php中的非法偏移类型在线32 注意:数组到字符串转换在第8行的C:\ xampp \ htdocs \ delta \ admin \ process \ test.php中 –