簡體   English   中英

如何在Laravel 5.4和MySQL中運行此子查詢

[英]How to run this subquery in Laravel 5.4 and MySQL

我需要在Laravel 5.4中運行此子查詢,並且在StackOverflow上找到的答案是針對Laravel <5的。

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%'

非常感謝您的幫助。

最好的祝福,

最簡單的方法是:

$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));

//建立內部查詢

$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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM