有这些表
并给定 post_map.tag_id='1'
,我想得到:
entity_type 表决定要查看的表,即 entity_id 存储在哪个表中。我的主要目标是将此表作为 mysqli::multi_query() 或 mysqli::query() 的结果,即没有 PHP多次来回数据库;这个表可能有很多行,一次获取这个表会更有效率。
到目前为止我的尝试:
- 我尝试过 JOIN 子句,但我不知道如何使用先前 SELECT 的行值作为 JOIN 子句的表名。
- 尝试了准备好的语句,但无法形成任何可用的语句。
最佳答案
可以通过 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'
关于php - 基于引用表值连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271521/