【问题标题】:Filter results based on foreign table根据外表过滤结果
【发布时间】:2016-09-05 17:15:53
【问题描述】:

假设我有 4 个表:collectionsvenueslocationscities

Collection 属于许多 VenuesVenue 属于许多 Collections

VenueLocation 之间存在一对一的关系(通过 id 字段)

一个Location属于一个City,一个City有多个Locations

我想要实现的是这个场景:

如果我在cities 表上有一条记录的id,我想在cities 表上与id 关联的每个collection 中获取所有collectionsvenues

我将如何实现这一目标? 我试图尽可能具体,但如果某些内容仍然含糊不清。
我正在使用 Laravel。因此,如果您提供 Eloquent 我将不胜感激,但 SQL 查询也可以。

【问题讨论】:

    标签: mysql sql laravel laravel-5 foreign-keys


    【解决方案1】:

    您可以编写如下所示的标准 SQL 查询,但我相信需要更多有关您的表结构的信息才能完整回答您的问题,尤其是集合和场所之间的多对多连接。

    Select ci.Id, ci.Header, co.Header,* from Cities ci
    inner join Locations l on l.id = ci.LocationId 
    inner join Venues v on v.id = l.VenueId 
    inner join Collections co on co.Id = v.CollectionId -- this is going to be a problem
    

    一个收藏属于多个场地,一个场地属于多个收藏

    多对多不是一个好的数据库关系设计模式我会推荐一个链接表来将它们分解成多对一的连接,如果可能的话,这也将简化所需的查询。

    ^Edit Laravel/Eloquent 可能会更好地处理这个问题,但根据我的经验,仅仅因为你可以做某事并不意味着你应该这样做,请参阅 SQL JOIN many-to-many 了解在 sql 查询中处理多对多的好方法或 Many to Many join Laravel Eloquent可能会有所帮助。

    【讨论】:

      【解决方案2】:

      同步你给引用的表的键

      SELECT co.anycolumn, v.anycolumn FROM collections co, venues v, cities ci, locations lo WHERE co.id = v.refid AND ci.refid = lo.refid AND lo = 'WantedLoc';
      

      简单的逻辑: SELECT --> 所需的列值 FROM --> 引用了表格 WHERE --> 条件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 2022-01-26
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多