2014-09-27 92 views
0

我有一个查询,我加入两个查询来获得我想要的,我可以在SQL中管理这很好,但是现在我完全失去了我该如何写这是Laravel。这里的SQL:Laravel内部加入两个查询

select * 
from 
    (
     select stu.s_nid as student_nid, stu.name as student_name, vote.id as vote_id 
     from student stu 
     left join vote on vote.student_id = stu.id 
     where vote.vote_no != 0 
    ) as q1 
    inner join 
    (
     select stu.s_nid as nominee_nid, stu.name as nominee_name, vnd.nominee_type_id, vnd.vote_id, nt.name_ar 
     from vote_nominee_details vnd 
     left join nominee nom 
     on nom.id = vnd.nominee_id 
     left join student stu 
     on stu.id = nom.student_id 
     left join vote 
     on vote.id = vnd.vote_id 
     left join nominee_type nt 
      on nt.id = vnd.nominee_type_id 
     where vnd.vote_id is not null 
     and vote.vote_no != 0 
    ) as q2 on q1.vote_id = q2.vote_id 

任何帮助,将不胜感激

回答

1

只是试试这个

$result = DB::select($sql); 

你也可以试试这个

DB::table(DB::raw('(select stu.s_nid as student_nid, stu.name as student_name, vote.id as vote_id 
     from student stu left join vote on vote.student_id = stu.id 
     where vote.vote_no != 0) as q1')) 
->join(DB::raw('(select stu.s_nid as nominee_nid, stu.name as nominee_name, vnd.nominee_type_id, vnd.vote_id, nt.name_ar from vote_nominee_details vnd 
     left join nominee nom on nom.id = vnd.nominee_id 
     left join student stu on stu.id = nom.student_id 
     left join vote on vote.id = vnd.vote_id 
     left join nominee_type nt on nt.id = vnd.nominee_type_id 
     where vnd.vote_id is not null and vote.vote_no != 0) as q2'), 'q2.vote_id', '=', 'q1.vote_id') 
->get(); 
+0

首先解决方案完美地工作,非常感谢你!第二个产生了一个我不明白的错误:SQLSTATE [42000]:语法错误或访问冲突:1066非唯一表/别名:'as'(SQL:select * from'(select' as'as inner join' (在'q2'.'vote_id' ='q1'.'vote_id'上选择'as'') – haakym 2014-09-27 10:32:19

+0

编辑2,可以再试一次 – worldask 2014-09-27 10:40:59

+0

Bossman!非常感谢您的帮助,可以确认这两个解决方案的工作,我结束了使用第二个 - 不知道如果一个以任何方式优于另一个? – haakym 2014-09-28 21:23:44