PHP/SQL 从 SQL 表中获取正确的数组

Posted

技术标签:

【中文标题】PHP/SQL 从 SQL 表中获取正确的数组【英文标题】:PHP/SQL get proper array from SQL table 【发布时间】:2016-12-28 19:30:41 【问题描述】:

我在数据库中得到了下表

- ID | successor 
- 01 | 02
- 01 | 04
- 01 | 08
- 02 | 03
- 04 | 05
- 05 | 06

这只是一个简单的电子学习系统内容分配表(这是正确的英文术语吗?)。

我当前的 php 代码是这样的

$sqlget = "SELECT * from successor";                        
$result = $conn->query($sqlget);                                                        
$dbsuccessor = [];
    
    if ($result->num_rows > 0)                                                             
        // output data of each row
        while($row = $result->fetch_assoc()) 
            $dbsuccessor[] = $row;                                                              
            
        
     else 
        echo "0 results";
    

使用 json_encode 将其解析为 js 后,我得到了一个像这样的无用构造

var successors = <?php echo json_encode($dbsuccessor);?>;
console.log(successor);

数组[9]

0:

对象 ID:“1” - 继任者:“2”

1:

对象 ID:“1” - 继任者:“4”

2:

对象 ID:“1” - 继任者:“8”

公平地说,这显然正是您对我上面使用的代码所期望的。

我的目标是这样的数组输出:

ID:"1" -> 后继"2","4","8"

所以在 javascript 中输入 console.log(successors[1]); 时,我可以看到 ID 为 1 的模块的所有后继模块

最好的办法是我的数据库表保持原样。 我怎样才能实现我的目标?

【问题讨论】:

请检查下面的答案,如果有任何人为您工作,那么将其标记并投票为可接受的答案。如果他们有用,也给其他人投票。 @Martin 如果您不需要进一步的帮助,请关闭您的问题。 我读到我需要 250 的声誉才能关闭某些东西。如果这不是真的,请告诉我该怎么做。 【参考方案1】:

使用Group_concat() 来实现这一点

将您的查询更改为

$sqlget = "SELECT ID,group_concat(successor) from successor group by ID";
$result = $conn->query($sqlget);                                                        
$dbsuccessor = [];

if ($result->num_rows > 0)                                                             
    // output data of each row
    while($row = $result->fetch_assoc()) 
        $dbsuccessor[] = $row;                                                              

    
 else 
    echo "0 results";

【讨论】:

必须感谢更好的答案。+10 就是这样,非常感谢。我没有测试这里发布的任何其他解决方案。【参考方案2】:

将生成数组的代码更改为:

$dbsuccessor[$row['ID']][] = $row['successor'];   

【讨论】:

以上是关于PHP/SQL 从 SQL 表中获取正确的数组的主要内容,如果未能解决你的问题,请参考以下文章

php显示取到表中某一列的全部数据

PHP + SQL,正确的带有父子类别和项目的tre [关闭]

如何从以正确列类型传递的 SQL 服务器获取数据

Ecshop——使用记录

Ecshop——使用记录

变量没有从 SQl 查询中获取数据