[라라벨]mysql 쿼리를 챗지피티와 제미나이를 이용해 orm으로 변경하기
챗지피티와 제미나이를 비교해보자.
select m.*,b.photo, ml.mylevel , z.gn, z.bn
from xc_memo m
join xc_member b on m.userid=b.email
left join xc_member_levels ml on ml.userid=m.userid
left join (
select mg.memoid, sum(mg.good) as gn, sum(mg.bad) as bn from xc_memo_grade mg group by memoid
) z on z.memoid=m.memoid
where m.status=1 and m.bid=100 order by ifnull(m.pid,m.memoid) asc, m.memoid asc
이런 간다하지 않은 쿼리를 두 ai에게 라라벨 orm으로 변경해달라고 해보았다.
먼저 챗지피티
$results = DB::table('xc_memo as m')
->join('xc_member as b', 'm.userid', '=', 'b.email')
->leftJoin('xc_member_levels as ml', 'ml.userid', '=', 'm.userid')
->leftJoin(DB::raw('(
select mg.memoid, sum(mg.good) as gn, sum(mg.bad) as bn
from xc_memo_grade mg
group by mg.memoid
) as z'), 'z.memoid', '=', 'm.memoid')
->select(
'm.*',
'b.photo',
'ml.mylevel',
'z.gn',
'z.bn'
)
->where('m.status', 1)
->where('m.bid', 100)
->orderByRaw('IFNULL(m.pid, m.memoid) ASC, m.memoid ASC')
->get();
제미나이는
$memos = Memo::query()
->select('xc_memo.*', 'xc_member.photo', 'xc_member_levels.mylevel', 'z.gn', 'z.bn')
->join('xc_member', 'xc_memo.userid', '=', 'xc_member.email')
->leftJoin('xc_member_levels', 'xc_member_levels.userid', '=', 'xc_memo.userid')
->leftJoinSub(function ($query) {
$query->select('memoid', DB::raw('sum(good) as gn'), DB::raw('sum(bad) as bn'))
->from('xc_memo_grade')
->groupBy('memoid');
}, 'z', 'z.memoid', '=', 'xc_memo.memoid')
->where('xc_memo.status', 1)
->where('xc_memo.bid', 100)
->orderByRaw('ifnull(xc_memo.pid, xc_memo.memoid) asc, xc_memo.memoid asc')
->get();
하지만 제미나이 쿼리는 오류가 난다. 오류가 나니 바꿔달라고 해도 말을 못알아먹고 바꾸질 못했다.
라라벨 orm으로 바꿀때는 챗지피티를 쓰도록 하자.