在mySQL中构造php数据

maz*_*lix 2 php mysql activerecord codeigniter

我有一个这样的数据模式:

cp
    id    te    su
    1     7     2
    2     7     1
    3     6     8

cl
    id    cp    st
    1     2     5
    2     2     6
    3     1     6

us
   id    na
   ..    ..
   5     Joe
   6     Mike
   7     Tina
   ..    ..
Run Code Online (Sandbox Code Playgroud)

我想运行一个PHP函数foo($te)foo(7)像这样的输出数据从MySQL

[0]
    su: 1
    st_list:
        [0]
            id:6
            na:Mike
[1]
    su: 2
    st_list:
        [0]
            id:5
            na:Joe
        [1]
            id:6
            na:Mike
Run Code Online (Sandbox Code Playgroud)

我想知道如何最好地做到这一点.现在我可以使用JOIN,但结果看起来像这样

[0]
    su: 1
    st_id:6
    st_na:Mike
[1]
    su: 2
    st_id:5
    st_na:Joe
[3]
    su: 2
    id:6
    na:Mike
Run Code Online (Sandbox Code Playgroud)

su:2重复......很明显,是不是在这个例子中的一个问题,问题是,在真实的东西su代表了很多数据,我会通过"本"(我选择的任何答案)方法会得到.

编辑: 我希望你明白我在问什么...我知道你们中很多人在我的SQL和开发方面比我更了解,所以这就是为什么我要求这么简单(我有这个 - --->想要这个)方式,因为我想如果我更具体地问我最终会对它应该运行的方式做出假设).我想要一个有效的解决方案,因为这些数据被用于填充搜索结果.

谢谢!!!!!!!!!!

San*_*hal 5

您需要自己循环结果并以您想要的格式构建数组.MySQL无法以您想要的嵌套格式提供结果.这是草稿(未经测试):

$su = 0;
$st_list = array();
$nested = array();
foreach ($results as $row) {
    if ($su != 0 && $row['su'] != $su) {
        $nested[] = compact('su', 'st_list');
    }

    if ($su != $row['su']) {
        $su = $row['su'];
        $st_list = array();
    }

    $st_list[] = array(
        'id' => $row['st_id'],
        'na' => $row['st_na'],
    );
}

$nested[] = compact('su', 'st_list');
Run Code Online (Sandbox Code Playgroud)

编辑:通常最好只使用单个SQL查询获取所需的所有结果.这几乎总是最有效的方法.但是如果它对你真的很重要(这是你的应用程序中性能关键部分),那么唯一可以确定的方法就是对这两种方法进行基准测试.很大程度上取决于您的数据库布局,行数,SQL索引等.