我的数据库中有一个表,其中包含客户公司之间的关系。 下面只是现有表格的一部分。
+----+---------+---------+
| 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/