php - mysql join 当字段是表名和主键时

标签 php mysql database join

我必须在 SugarCRM 上为报告构建复杂的查询。 SugarCRM 关系存储在一些表中,因此我需要使用关系表连接多个表。这些表具有 modelmodel_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/

相关文章:

php - 如何加快 MySQL 产品搜索结果的速度?

PHP - 准备好的查询与未准备的查询

php - 如何使用 PHP/MYSQL 进行下拉选择

php - 定义 laravel 的基本 url

mysql - 将 not exits 转换为另一个使用 join 的查询

php - mysql-插入后5分钟从表中删除

Java jdbc 连接到远程局域网服务器上的 mariadb

php - MYSQL - 文件名的字段类型?

sql - 排除 Material list 样式关系中的空值

Php MySQL 通过 MySQL 连接数据库不起作用,但 ODBC 可以