php - 获取行及其之间的关系

标签 php mysql database recursion

我的数据库中有一个表,其中包含客户公司之间的关系。 下面只是现有表格的一部分。

+----+---------+---------+
| ID | Client1 | Client2 |
+----+---------+---------+
| 18 |     250 |      77 |
| 19 |     250 |     317 |
| 13 |     317 |      12 |
|  5 |      23 |      12 |
+----+---------+---------+

当看到客户端 250 时,我还可以显示客户端 77 和 317。我希望能够获取链中其他客户端的 id,以便当我的用户打开客户端 250 时可以看到 77、317、12 的 id和23。 有没有一种方法可以通过一个 mysql 查询获取所有 id,或者我应该进行一些其他数据处理。 以下是对当前情况的查询和一些检查:

$sql = "SELECT cc.Id, cc.Client1Id, cc.Client2Id, cc.Note
            FROM ClientConnections as cc
            WHERE cc.Client1Id  = ? OR cc.Client2Id = ?";
            $stmt = $this->db -> prepare($sql);
            $stmt -> bind_param('ii', $id, $id);
            $stmt -> execute();
            $stmt -> bind_result($connectionId, $client1Id, $client2Id, $note);
            $stmt -> store_result();

        while($stmt -> fetch()){

            //if found client has the same id as the current client
            if ($client1Id == $id) {
                $clientId = $client2Id;
            }elseif ($client2Id == $id) {           
                $clientId = $client1Id;
            }

            $name = $this->getClient($clientId); //getting client info

            $array[] = array(
                'id' => $connectionId,
                'client_id' => $clientId,
                'name' => $name['name'],
                'payment_status' => $name['payment'],
                'note' => $note
            );

        }

如果有一个查询可以完成这项工作将是完美的,但如果没有,我会很高兴有人给我一个想法如何做到这一点。也许是递归?我被困住了。

最佳答案

试试这个 answer .

此人正在使用 GROUP_CONCAT 对行进行分组。您可以在查询中使用它根据客户端 1 对行进行分组。

  SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id

问题是他使用两个表来执行此操作,因此您可以拆分表,也可以在同一个表上执行 INNER JOIN (SELECT ..)。

关于php - 获取行及其之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205124/

相关文章:

c# - 如何更改已部署的Azure应用程序中的连接字符串

php - 尝试使用 PHP 将带有 UNICODE 代码的 JSON 字符串转换为 UTF8

php - 路由在 Symfony 3.2 中不起作用

mysql - 选择是否以开头但不存在于其他表中的单词

mysql - 如何使用命令提示符恢复 MySQLDump 生成的 SQL 文件

sql - postgres : Delete rows that has foreign key while not deleting data of the foreign key table

php - 将 PHP cURL 转换为 bash cURL 调用

javascript - AJAX:responseXML 返回 null,但 ResponseText 将 XML 作为字符串返回

mysql - SQL数据库创建错误

sql - 需要帮助将数据从一个表传输到同一数据库中的另一个表