【问题标题】:How to select distinct hierarchy nodes(MySQL)如何选择不同的层次结构节点(MySQL)
【发布时间】:2012-07-08 10:38:40
【问题描述】:

我使用的是邻接模型列表,例如:

父插孔 ID 1

孩子 some_name parent_id 1

孩子 some_name parent_id 1

孩子 some_name parent_id 1

所以当我进行查询时,可以说深度约为 1 lvl,它会呈现:

jack -> some_name

jack -> some_name

jack -> some_name

但我怎样才能让它像这样呈现:

杰克-> {

一些名字

一些名字

一些名字

}

这可能吗?因为关键字 DISTINCT 和 GROUP BY 没有帮助:(

【问题讨论】:

  • 我希望它在 MySQL 中呈现这样的效果,而不是在客户端 PHP 中
  • GROUP BY 运算符返回一个插孔,但它也只返回一个不是我想要的孩子,我只想渲染一个父母和许多孩子,如果这些孩子有另一个孩子,也渲染一个父母和许多孩子......
  • 或者,如果这不可能,你能给我一个例子或如何在 php 中制作它,比如说使用 codeigniter,像这样渲染吗?
  • 据我所知,你不能在 mysql 中实现这个,你必须使用 php 来实现这个结构
  • 请举个小例子,我如何在 php 中渲染它?以 html 显示,我问是因为我将有 24 级深度,而且我不想写太多代码,你对如何使它变得更好有一些想法吗?(优雅)

标签: php mysql database codeigniter


【解决方案1】:

考虑使用 JSON 来格式化您的数据。

使用 json_encode:

$persons = array ();
while ($row = mysql_fetch_assoc($result))
{
    if (empty($persons[$row['person']]))
        $persons[$row['person']] = array ();
    array_push ($persons[$row['person']], $row['child']);
}

echo json_encode ($persons);

它应该导致以下结果:

{
    'jack': [
        'some_name',
        'some_name',
        'some_name'
    ]
}

大部分代码来自https://stackoverflow.com/a/1951130/443219

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多