gpt4 book ai didi

mysql - 根据列值连接可变数量的表

转载 作者:行者123 更新时间:2023-11-29 01:53:05 26 4
gpt4 key购买 nike

我的代码中有一些模型,这些模型在我的 MySQL 数据库中以这种结构建模:

 Properties
+----+------+---------+
| id | name | address |
|----+------+---------|
| 1 | p1 | 123 st |
| 2 | p2 | 123 st |
| 2 | p3 | 123 st |
+----+------+---------+

Tenants (belongs to property)
+----+-------------+-------+
| id | property_id | suite |
|----+-------------+-------|
| 1 | 1 | s1 |
| 2 | 1 | s2 |
| 3 | 2 | s3 |
+----+-------------+-------+

Costs (can belong to property or tenants)
+----+--------------+-----------+--------------+
| id | parent_model | parent_id | name |
|----+--------------+-----------+--------------+
| 1 | property | 1 | gardening |
| 2 | property | 2 | construction |
| 3 | tenant | 1 | renovation |
+----+--------------+-----------+--------------+

Files (can belong to any model)
+----+--------------+-----------+--------------+
| id | parent_model | parent_id | name |
|----+--------------+-----------+--------------+
| 1 | property | 1 | file1.jpg |
| 2 | tenant | 2 | file2.pdf |
| 3 | costs | 3 | file3.doc |
+----+--------------+-----------+--------------+

正如您从表结构中看到的那样,所有模型都可以链接回 property 记录(直接或通过一个或多个中间表)。

在我的代码中,我想编写一个查询来获取 fileproperty.id看完这个问题后:Joining different tables based on column value我意识到可以通过几次连接找到从 fileproperty 的“链接”。

根据 parent_model 的不同,所需的连接数也不同。对于 file.id = 1 它加入 properties 表的问题。对于 file.id = 3,我们必须加入 coststenantsproperties

应该如何编写查询才能为我的所有 files 记录获取 property.id


编辑:这将是一个示例输出:

+---------+-------------+
| file_id | property_id |
|---------+-------------|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
+---------+-------------+

在这种情况下,所有文件都与 property_id 1 关联,但情况可能并非总是如此。

最佳答案

我认为没有捷径可走。您需要沿着这些路线遍历所有路径

select -- property files
FileID, parent_id
from Files
where parent_model='property'
union
select -- property costs
FileID, c.parent_id
from
Files inner join costs C on Files.parent_id=c.id and c.parent_model='property'
where Files.parent_model='costs'
union
select -- tenant costs
FileID, t.parent_id
Files inner join costs C on Files.parent_id=c.id and c.parent_model='tenant'
inner join tenant t on t.id=c.parent_id
where Files.parent_model='costs'
.... etc.

即只需将所有变体串在一起,然后 UNION

关于mysql - 根据列值连接可变数量的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com