Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每个表的外键或遍历表_Php_Mysql_Database_Database Design - Fatal编程技术网

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 5000的所有属性,我可以:

  • 将公司id列添加到属性和事务中,然后我进行以下查询:

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

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();
    
或SQL

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查询的基础知识。