2017-10-12 94 views
1

我想写qhich希望将laravel查询在单个查询多个选择查询多个选择查询

select name,owner from project where owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%sridhar p%' or b.manager like '%sridhar p%') and customer_code='OTH_0071' 

上面的查询列表我想要exactly.I的outpu想改变查询在laravel

回答

1

与whereRaw你可以做这样的

DB::table('project')->where('customer_code','OTH_0071')->whereRaw("owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%sridhar p%' or b.manager like '%sridhar p%')")->select('name','owner')->get(); 

帮助使用可变

DB::table('project')->where('customer_code','OTH_0071')->whereRaw("owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%".$manager."%' or b.manager like '%sridhar p%')")->select('name','owner')->get(); 

更多信息VIST laravel $经理

希望它会帮助你的!

+0

如何使用查询$经理=“斯里达尔P”变量 – user3386779

+0

检查现在编辑原始查询解决方案 –

+0

我想用变量 – user3386779

1

我可能会使用一系列的连接第一重写查询:

$subquery = "(SELECT a.user_name FROM users a LEFT JOIN users b "; 
$subquery .= "ON a.manager = b.firstname "; 
$subquery .= "WHERE a.user_name = 'sridhar.ps' OR a.manager LIKE '%sridhar p%' "; 
$subquery .= "OR b.manager LIKE '%sridhar p%') AS t"; 
DB:table('project) 
    ->select('name', 'owner') 
    ->join(DB::raw($subquery), 'p.owner', '=', 't.user_name') 
    ->where('customer_code','OTH_0071') 
    ->get(); 

此连接:

SELECT 
    p.name, 
    p.owner 
FROM project p 
INNER JOIN 
(
    SELECT a.user_name 
    FROM users a 
    LEFT JOIN users b 
     ON a.manager = b.firstname 
    WHERE 
     a.user_name = 'sridhar.ps' OR 
     a.manager LIKE '%sridhar p%' OR 
     b.manager LIKE '%sridhar p%' 
) t 
    ON p.owner = t.user_name 
WHERE 
    p.customer_code = 'OTH_0071'; 

使用原始子查询,以表示该表别名为t上面然后建立Laravel查询方法可能比您目前拥有的更高性能。无论如何,你可以测试这个答案,将它与@Gaurav的答案进行比较,然后使用最好的方法。

+0

在哪里添加客户代码 – user3386779

+0

@ user3386779对不起,我忽略了这一点。我更新了我的答案。就像平常那样打电话给'where';你不需要原始查询。 –

+0

我试图选择名称和代码,但不工作 – user3386779