Php 每个表的外键或遍历表
最佳实践是什么,或者在这种情况下,如何从不同的表中获取数据更为优化Php 每个表的外键或遍历表,php,mysql,database,database-design,Php,Mysql,Database,Database Design,最佳实践是什么,或者在这种情况下,如何从不同的表中获取数据更为优化 表代理 身份证 公司id 名字 表属性 身份证 由(代理)添加 表事务 身份证 物业编号 要获取公司ID 5000的所有属性,我可以: 将公司id列添加到属性和事务中,然后我进行以下查询: $properties = Property::where('company_id', 5000)->get(); $transactions= Transaction::where('company_id', 500
- 表代理
- 身份证
- 公司id
- 名字
- 表属性
- 身份证
- 由(代理)添加
- 表事务
- 身份证
- 物业编号
- 将公司id列添加到属性和事务中,然后我进行以下查询:
$properties = Property::where('company_id', 5000)->get(); $transactions= Transaction::where('company_id', 5000)->get();
SELECT * FROM transactions WHERE company_id = 5000;
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;
- 遍历表并获取数据:
$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();
SELECT * FROM transactions WHERE company_id = 5000;
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和雄辩的ORM,但示例可以与纯MYSQL或任何其他语言一样好。多谢各位
更新:
下面是用于创建的SQL
为什么有两个问题?一个
JOIN
查询就可以轻松地获得这些信息。join agent->properties on agent.id=added\u byAnd for transactions?如果我需要公司的所有交易?从交易中选择transaction.id t在t.property\u id=p.id上加入属性p,其中p.company\u id=:company
您的解决方案意味着将公司id添加到属性中。如果我已经有了关于代理的这个专栏,这是必要的吗?对于数据的关系表示,迭代从来都不是必要的。建议您阅读有关关系数据库和SQL查询的基础知识。为什么选择两个查询?一个JOIN
查询就可以轻松地获得这些信息。join agent->properties on agent.id=added\u byAnd for transactions?如果我需要公司的所有交易?从交易中选择transaction.id t在t.property\u id=p.id上加入属性p,其中p.company\u id=:company
您的解决方案意味着将公司id添加到属性中。如果我已经有了关于代理的这个专栏,这是必要的吗?对于数据的关系表示,迭代从来都不是必要的。建议您阅读有关关系数据库和SQL查询的基础知识。