每个表的外键或遍历表

时间:2016-10-14 18:37:43

标签: php mysql database database-design

在这种情况下,如何获得最佳实践,或者从不同表中获取数据的效果如何?

  • 表格代理

    • ID
    • COMPANY_ID
    • 名称
  • 表格属性

    • ID
    • added_by(代理人)
  • 表格交易

    • ID
    • PROPERTY_ID

要获得公司ID 5000的所有属性,我可以:

  • 将一个company_id列添加到属性和事务中,然后我进行以下查询:

    $properties = Property::where('company_id', 5000)->get();
    $transactions= Transaction::where('company_id', 5000)->get();
    

OR SQL

SELECT * FROM transactions WHERE company_id = 5000;
  • 遍历表并获取数据:

    $properties = Property::whereHas('agent', function($query){
        $query->where('company_id', 5000);
    })->get();
    
    $transactions = Transaction::whereHas('property', function($query){
        $query->whereHas('agent', function($q){
            $q->where('company_id', 5000);
        });
    })->get();
    

OR SQL

SELECT * FROM transactions T 

LEFT JOIN properties P ON T.property_id = P.id

LEFT JOIN users U ON P.added_by = U.id

WHERE U.company_id = 5000;

在我的示例中,我使用了PHP和Eloquent ORM,但示例可以与纯MYSQL或任何其他语言一样。谢谢。

更新

这是用于创建的SQL。

http://pastebin.com/65ry7BeY

0 个答案:

没有答案