从外键检索树递归数据

2024-06-25 23:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MySQL中有一些表和它的数据,但是我需要根据它的外键检索树显示中的所有数据。你知道吗

Table Structures

表后

+=====================================================================+
| column | type | nullable | key    | foreign_key | rel_tbl | rel_col |
|========|======|==========|========|=============|=========|=========+
|Id      |INT   | NO       |PRIMARY |NO           | NO      | NO      |
|Posts   |string| NO       | NO     |NO           | NO      | NO      |
|PostMed |INT   | yes      |INDEX   |yes          | PostMed | Id      |
|User    |INT   | NO       |INDEX   |yes          | User    | Id      |
+=====================================================================+

表格用户

+======================================================================+
| column  | type | nullable | key    | foreign_key | rel_tbl | rel_col |
|=========|======|==========|========|=============|=========|=========+
|Id       |INT   | NO       |PRIMARY |NO           | NO      | NO      |
|Name     |string| NO       | NO     |NO           | NO      | NO      |
|Email    |string| NO       |unique  |NO           | NO      | NO      |
|UserPhoto|string| NO       |unique  |Yes          |UserPhoto|Id       |
+======================================================================+

表格用户照片

+======================================================================+
| column | type | nullable | key    | foreign_key | rel_tbl | rel_col |
|========|======|==========|========|=============|=========|=========+
|Id      |INT   | NO       |PRIMARY |NO           | NO      | NO      |
|Value   |string| NO       | NO     |NO           | NO      | NO      |
|Type    |string| NO       | NO     |NO           | NO      | NO      |
+=====================================================================+

表格已邮递

+======================================================================+
| column | type | nullable | key    | foreign_key | rel_tbl | rel_col |
|========|======|==========|========|=============|=========|=========+
|Id      |INT   | NO       |PRIMARY |NO           | NO      | NO      |
|Value   |string| NO       | NO     |NO           | NO      | NO      |
|Type    |string| NO       | NO     |NO           | NO      | NO      |
+=====================================================================+

And This is the data

发布

+=============================+
|Id | Posts  | PostMed | User | 
|===|========|=========|======|
|1  |Hello   | 1       | 1    |
|2  |World   | Null    | 1    |
|3  |Dominate| 2       | 2    |
+=============================+

用户

+====================================+
|Id | Name  | Email        |UserPhoto|
|===|=======|==============|=========|
|1  |kzul   | kzvl@mail.com|1        |
|2  |jhon   | jhon@mail.com|2        |
+====================================+

用户照片

+===========================+
|Id | Value     | Type      |
|===|===========|===========|
|1  |kzul.jpg   | image/jpeg|
|2  |jhon.png   | image/png |
+===========================+

邮递

+===========================+
|Id | Value     | Type      |
|===|===========|===========|
|1  |kzul.jpg   | image/jpeg|
|2  |jhon.mp3   | audio/mp3 |
+===========================+

如您所见,表posts有两个外键列postedUserposted列与列Id引用的表posted有关系,而且User列与Id列引用的表User有关。 因此,当我尝试从表Posts中检索所有数据时,任务必须是JSON类型,并在树中格式化,如下所示:

[
  {
      "Id": 1,
      "Posts": "Hello", 
      "PostMed": {
            "Id": 1,
            "Value": "kzul.jpg",
            "Type": "image/jpeg"
      }, 
      "User": {
            "Id": 1,
            "Name": "kzul",
            "Email": "kzvl@mail.com",
            "UserPhoto":{
                 "Id": 1,
                 "Value": "kzul.jpg",
                 "Type": "image/jpeg",
            }
      } 
  },
  {
      "Id": 2,
      "Posts": "World", 
      "PostMed": null, 
      "User": {
            "Id": 1,
            "Name": "kzul",
            "Email": "kzvl@mail.com"
            "UserPhoto":{
                 "Id": 1,
                 "Value": "kzul.jpg",
                 "Type": "image/jpeg",
            }
      } 
  },
  {
      "Id": 3,
      "Posts": "Dominate", 
      "PostMed": {
            "Id": 2,
            "Value": "jhon.mp3",
            "Type": "audio/mp3"
      }, 
      "User": {
            "Id": 2,
            "Name": "jhon",
            "Email": "jhon@mail.com"
            "UserPhoto":{
                 "Id": 2,
                 "Value": "jhon.png",
                 "Type": "image/png",
            }
      } 
  }
]

如果我检索另一个有外键的表,它将如上所示。 在PHP或Python中的任何例子,建议工具或算法,我可以使用这些树来创建我的数据?你知道吗

对不起,我英语不好


Tags: keynoimageidstringvaluetypeint