[英]Choose a database table to join with, using a field value
我正在建立的网站上有一个表,用于存储网站上已上传图像的所有信息。 这些上载的图像可以来自不同的资源,例如留言簿,新闻栏目或议程中的项目。
当然,我希望图像继承其所属资源的权利。 例如:如果不允许用户A查看留言簿,我不希望他能够通过转到image / view / id / 12来查看留言簿上发布的图像(这是使用它的图像请求)在留言簿中)。
我现在所拥有的是,系统会记住图像ID与资源ID耦合使用的资源(在本例中为留言簿)。 但是我不知道图像连接到哪个留言簿(当然我也知道)。
在SQL中,有没有一种方法可以将一个表字段连接到另一个表中的字段,我连接到哪个表可以根据第一个表的字段值之一而变化?
就我而言,我想将图像连接到资源,该资源可以是表gb_posts中的留言簿帖子,也可以是表议程中的议程项目。
还是这是解决问题的一种愚蠢方法,我是否不应该对上载的图像使用一个表,而是将图像附加到资源(例如,作为表中的一列)? 听起来使用一张桌子的使用速度至少要慢很多(但是我会在一处对所有图像进行全面的概述)。
我希望你们能帮助我。
编辑:额外的解释:数据库模型我将尽力解释一切如何工作。
首先:我使用Zend Framework,因此,我也使用Zend_Acl处理特权。
我的数据库结构:-用户连接到角色(直接或通过连接到与角色连接的组)-有一个表资源,其中包含与特权连接的所有资源。 例如:guestbook是一种资源,view或edit是特权。 在控制器/动作旁边,此表中还可以包含其他资源,例如议程中的类别或文件位置。 -角色已连接到特权
例如,当请求查看留言簿时,我可以检查是否允许该用户。
简而言之,例如:用户->角色->特权<-资源
当用户添加带有图像的留言簿帖子时,已使用的资源(在这种情况下,留言簿已保存):guestbook_posts->图片->资源
我希望这能对我的数据库模型有所解释,否则,我将尝试创建表的图像。
听起来好像您想要一个外键约束 。
更新:显然完全误解了这个问题。
这里有两种方法:
从目前的情况来看,架构中没有任何东西可以禁止从多个资源链接同一图像。 如果需要的话,外键约束和用于反向引用的索引可能是最好的解决方案,尽管它无法很好地扩展,并且需要进行额外的计算(因为图像上的权限必须是参考资源)。
另一种方法是创建某种继承模式,其中有一个表列出了“资源”(实际上仅包含标识符),该表被引用为实际资源表和图像表中的外键。 不能用普通SQL表示的唯一约束是不同的资源可能不会共享相同的标识符。
我不得不承认我无法完全理解您想要实现的模型,但是有一个有趣的报价...
但是我不知道图像连接到哪个留言簿(当然我也知道) 。
如果您以一种方式了解关联,那么您应该可以双向使用关联吗? 我假设您有一个包含“ post_id,image_id”之类的表?
可能是该表仅首先被索引为post_id,在这种情况下,通过image_id查询该表可能会很慢,但是您可以仅使用image_id首先包含一个新索引吗?
如果您可以提供当前具有的表结构示例,而您无法提供完整的查询示例,我们也许可以为您提供进一步的帮助。
创建两个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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.