根据引用表值连接表

时间:2015-02-02 05:20:03

标签: php mysql database join normalization

有这些表格 enter image description here

并给予post_map.tag_id='1',我想得到: enter image description here

entity_type表确定要查看哪个表,即存储哪个表entity_id。我的主要目标是将此表作为mysqli :: multi_query()或mysqli :: query()的结果,即不使用PHP多次往返于数据库;这个表可能有很多行,一次获得这个表会更有效率。

到目前为止我的尝试:

  • 我尝试了JOIN子句,但我不知道如何使用先前SELECT的行值作为JOIN子句的表名。
  • 尝试了准备好的陈述,但无法形成任何可用的内容。

1 个答案:

答案 0 :(得分: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'