2017-06-04 112 views
0

运行此子查询,我需要运行此子查询中Laravel 5.4和我已经在计算器上找到的答案是Laravel < 5.如何Laravel 5.4和MySQL

SELECT DISTINCT * 
        FROM (
          SELECT DISTINCT 
          testing_results.pluginName, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '#', -1), '/', 1) AS access_vector, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 2), '/', -1) AS access_complexity, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 3), '/', -1) AS authentication, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 4), '/', -1) AS confidentiality, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 5), '/', -1) AS integrity, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 6), '/', -1) AS availability 
          FROM 
          testing_results 
          WHERE 
          testing_results.cvss_vector != '' 
         ) sub 
         WHERE sub.access_vector LIKE '%AV:L%' 

非常感谢你在先进的你的帮助。

最好的问候,要做到这一点

回答

1

简单的方法是:

$query = <<<SQL 
SELECT DISTINCT * 
       FROM (
         SELECT DISTINCT 
         testing_results.pluginName, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '#', -1), '/', 1) AS access_vector, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 2), '/', -1) AS access_complexity, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 3), '/', -1) AS authentication, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 4), '/', -1) AS confidentiality, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 5), '/', -1) AS integrity, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 6), '/', -1) AS availability 
         FROM 
         testing_results 
         WHERE 
         testing_results.cvss_vector != '' 
        ) sub 
        WHERE sub.access_vector LIKE '%AV:L%' 
SQL; 

dd(DB::select($query)); 
+0

谢谢!有用!还有一件事我想做,我想计算结果,但是当我尝试调用方法'count();'像这样'DB :: select($ query) - > count() ;'它不起作用。你能否指点我正确的方向?再次,谢谢! – SecretCoder

+0

@SecretCoder你可以将它转换为集合,然后使用熟悉的方法:'collect(DB :: select($ query)) - > count()',或者像普通数组一样工作:'count(DB :: select ($查询))'。 – Anton

+0

完美!祝福,你是男人! – SecretCoder

0

//大厦内部查询

$sub_query = DB::table('testing_results') 
->select([DB::raw('DISTINCT testing_results.pluginName'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '#', -1), '/', 1) AS access_vector'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 2), '/', -1) AS access_complexity'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 3), '/', -1) AS authentication'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 4), '/', -1) AS confidentiality'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 5), '/', -1) AS integrity'), 
DB::raw('SUBSTRING_INDEX(SUBSTRING_INDEX(cvss_vector, '/', 6), '/', -1) AS availability') 
]) 
->where('testing_results.cvss_vector', '!=', ''); 

//创建外部查询

$query = DB::raw("({$sub_query->toSql()}) as sub_query"); 
$data = DB::table($query) 
     ->mergeBindings($sub_query) 
     ->where('access_vector', 'NOT LIKE', '%AV:L%')->get(); 

注:这适用于Laravel 5.2,这意味着它将在Laravel 5.4上运行。