【问题标题】:simplify query for additional data using Laravel 5.2使用 Laravel 5.2 简化对附加数据的查询
【发布时间】:2015-12-29 03:53:52
【问题描述】:

我有一个查询,需要根据第一次查询的结果提供更多信息。这是代码

$params = DB::select('SELECT vpl_ppid, vpl_name, vpl_display, vpl_filter 
                      FROM vw_parameter_list 
                      WHERE vpl_slug = :type', ['type' => $type]);
foreach ($params as $param) {
    $pd_vals = DB::select('SELECT * FROM parameter_distinct_value WHERE pd_ppid = :vpl_ppid ORDER BY pd_value', ['vpl_ppid' => $param->vpl_ppid]);          
    $param->value_list = $pd_vals;
}

正如您在上面看到的,我只是创建了一个新数组 ($param->value_list) 以将更多数据加载到其中。 如何通过消除foreach 中的查询来简化查询,以实现与上述相同的速度和输出。谢谢

【问题讨论】:

标签: php mysql laravel laravel-5.2


【解决方案1】:

您可以使用子查询:

$results = DB::select('
    SELECT * 
    FROM 
        parameter_distinct_value 
    WHERE pd_ppid IN(
        SELECT vpl_ppid FROM vw_parameter_list WHERE vpl_slug = :type
    ) 
    ORDER BY pd_value
', ['type' => $type]);

或加入

$results = DB::select('
    SELECT pdv.*
    FROM
        parameter_distinct_value pdv
        INNER JOIN vw_parameter_list vpl ON vpl.vpl_ppid = pdv.pd_ppid
    WHERE vpl.vpl_slug = :type
    ORDER BY pdv.pd_value
', ['type' => $type]);

【讨论】:

  • 实际上我在查询表 vw_parameter_list 时需要一些字段,从 laravel 的集合 ($params) 中可以看出,我只是创建了额外的 key 以将更多数据加载到其中.我已经修改了上面的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2020-01-16
  • 2016-05-22
  • 2015-04-13
  • 1970-01-01
  • 2018-01-26
  • 2017-03-04
相关资源
最近更新 更多