使用字段值选择要加入的数据库表

时间:2011-02-25 14:34:01

标签: mysql sql

我正在建立的网站有一个表格,用于存储网站上传图像的所有信息。这些上传的图像可以来自不同的资源,例如留言板,新闻栏目或议程中的项目。

当然,我希望图像继承其所属资源的权利。例如:如果不允许用户A查看留言簿,我不希望他能够通过转到image / view / id / 12来查看留言簿上发布的图像(这将是图像请求使用它在留言簿中。)

我现在拥有的是系统记住所使用的资源(在本例中是留言簿),image-id与资源ID相关联。但是我不知道图像连接到哪个留言簿帖子(我当然知道它的相反方式)。

在SQL中是否有办法将一个表字段连接到另一个表中的字段,我连接到哪个表可能会根据第一个表的字段值之一而变化? < / em>

在我的情况下,我想将图像连接到资源,这可能是表格gb_posts中的留言板帖子或表议事项目中的议程项目。

或者这是解决问题的一种愚蠢的方法,我不应该为上传的图像使用一个表,而是将图像附加到资源上(例如,作为表中的列)?听起来好像使用一个表在使用中至少要慢得多(但我会在一个地方对所有图像进行很好的概述)。

我希望你们能帮助我。

编辑:额外说明:db model 我将尝试解释它如何最好地工作。

首先:我使用Zend Framework,因此我也使用Zend_Acl来处理priveleges。

我的数据库结构: - 用户连接到角色(直接或通过连接到连接到角色的组) - 有一个表资源包含连接到priveleges的所有资源。例如:留言簿是资源,查看或编辑是priveleges。在控制器/动作旁边,该表中还可以有其他资源,例如议程中的类别或文件位置。 - 角色与privelege相关联

例如,当请求查看留言簿时,我可以检查是否允许用户。

简而言之: 用户 - &gt;角色 - &gt; priveleges&lt; - resources

当用户添加带有图像的留言板帖子时,使用的资源(在这种情况下保存了留言簿): guestbook_posts - &gt;图像 - &gt;资源

我希望这能解释一下我的数据库模型,如果没有,我会尝试创建表格的图像。

3 个答案:

答案 0 :(得分:0)

听起来像是想要foreign key constraint

更新:显然,完全误解了这个问题。

这里有两种方法:

  1. 目前的情况是,架构中没有任何内容可以禁止从多个资源链接相同的图像。如果需要,那么外键约束和反向引用的索引可能是最好的解决方案,虽然它不能很好地扩展,并且需要额外的计算(因为图像上的权限需要是权利的联合。参考资源)。

  2. 另一种方法是创建某种继承模式,其中有一个表列出了“资源”(实际上只包含标识符),该表从实际资源表和images表中作为外键引用;唯一不能在纯SQL中表达的约束是不同的资源可能不共享相同的标识符。

答案 1 :(得分:0)

我不得不承认我没有完全理解你想要实现的模型,但有一个有趣的引用......

  

但是我不知道哪个   留言簿发布图像已连接   (我当然知道另一种方式   周围)

如果您以某种方式了解关联,那么您应该可以在两个方向上使用关联吗?我假设你有一个包含“post_id,image_id”或其他什么的表?

表可能只是首先将post_id索引,在这种情况下,通过image_id查询该表可能会很慢,但是你可以先用image_id包含一个新索引吗?


如果您可以提供目前所拥有的表格结构的示例,以及您无法满足的查询示例,我们可以为您提供进一步的帮助。

答案 2 :(得分:0)

创建两个SELECT子句,每个子句与正确的表具有正确的连接,然后使用UNION语句将两个SELECT子句的输出组合在一起。

SELECT field1, field2 
FROM table1 
JOIN table2 on table1.PK = table2.FK
WHERE table1.selector = 1

UNION SELECT field1, field2 
FROM table1 
JOIN table3 on table1.PK = table3.FK
WHERE table1.selector = 2