【问题标题】:Joining tables based on reference table value基于引用表值连接表
【发布时间】:2015-04-01 00:46:05
【问题描述】:
有这些表
给定post_map.tag_id='1',我想得到:
entity_type 表确定要查看的表,即存储实体 ID 的表。我的主要目标是获取此表作为 mysqli::multi_query() 或 mysqli::query() 的结果,即不使用 PHP多次往返于数据库;这个表可能有很多行,一次获取这个表会更有效率。
到目前为止我的尝试:
- 我试过JOIN子句,但不知道如何使用之前SELECT的行值作为JOIN子句的表名。
- 尝试了 Prepared Statments,但无法形成任何可用的东西。
【问题讨论】:
标签:
php
mysql
database
join
normalization
【解决方案1】:
可以通过 IF() 和 JOIN 来完成。我有你的解决方案,运行下面的查询...
SELECT et.type,
IF(et.type='resource',r.resource_type_id,NULL) AS resource_type_id,
IF(et.type='resource',r.value,NULL) AS value,
IF(et.type='user',u.name,NULL) AS name,
IF(et.type='link',l.source,NULL) AS source,
IF(et.type='link',l.count,NULL) AS count
FROM `post_map` as pm
JOIN `entity_type` as et ON pm.entity_id = et.id
LEFT JOIN `resource` as r ON pm.entity_type_id=r.id
LEFT JOIN `user` as u ON pm.entity_type_id=u.id
LEFT JOIN `link` as l ON pm.entity_type_id=l.id
WHERE pm.tag_id='1'