我必须在 SugarCRM
上为报告构建复杂的查询。 SugarCRM 关系存储在一些表中,因此我需要使用关系表连接多个表。这些表具有 model
和 model_id
,它们标识表并记录主 ID。
下面是我正在尝试做的事情的示例。
博客:带有字段 ID 的主表
BLOG_ENTRY:博客的子表,包含字段 ID、BLOG_ID(BLOGS 表的 FK)和 POST_CONTENT_ID(下一个表 BLOG_CONTENT 的 FK)
BLOG_CONTENT 包含字段 ID、MODEL(标识子表)和 MODEL_ID(标识子表 ID)
带有字段 ID 的 BLOG_CONTENT_TABLE_ONE
假设我们可以有多个表 BLOG_CONTENT_TABLE_TWO, ...
查询应该类似于:
select blogs.id, blog_content.model, blog_content.model_id, blog_content_table_one.id
from blogs, blog_entry, blog_content, blog_content_table_one
where
# join blog and blog_entry
blog.id = blog_entry.blog_id
# join blog_entry and blog_content
AND blog_entry.content_id = blog_content.id
# join blog_content and blog_content_table_one
AND blog_content.model = 'blog_content_table_one'
AND blog_content.model_id = blog_content_table_one.id
这可行,但如果有更多表,我想我应该使用 MySQL 案例?
最佳答案
首先,对 JOIN
使用 ON
子句。其次,我认为不可能获得所有可能的组合,但对于三个博客内容表,您可以采用类似的方法。
SELECT
blogs.id,
blog_content.model,
blog_content.model_id,
blog_content_table_one.id
blog_content_table_two.id
blog_content_table_three.id
FROM blogs
JOIN blog_entry
ON blog.id = blog_entry.blog_id
JOIN blog_content
ON blog_entry.content_id = blog_content.id
LEFT JOIN $blogtable1 blog_content_table_one
ON blog_content.model_id = blog_content_table_one.id
AND blog_content.model = '$blogtable1'
LEFT JOIN $blogtable2 blog_content_table_two
ON blog_content.model_id = blog_content_table_two.id
AND blog_content.model = '$blogtable2'
LEFT JOIN $blogtable3 blog_content_table_three
ON blog_content.model_id = blog_content_table_three.id
AND blog_content.model = '$blogtable3'
WHERE blog_content.model IN ('$blogtable1', '$blogtable2', '$blogtable3')
关于php - mysql join 当字段是表名和主键时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27010607/