我有两张桌子,一张是'会员'另一个是“储蓄”。会员表如下:
id|DomainName|DivisionName|ZoneName|MemberId|GeneralSaving
1| hem | raj | raj |1111 |100
2| hem | raj | bog |2222 |100
3| edu | dha | dha |3333 |100
4| edu | dha | nara |4444 |100
5| busi | dha | gazi |5555 |100
6| busi | raj | raj |6666 |100
和'储蓄'表格如下:
id|DomainName|DivisionName|ZoneName|MemberId|DPS|Month|Year|AccounNo
1| hem | raj | raj |1111 |100|jan |2017|11111
2| hem | raj | bog |2222 |150|jan |2017|22221
3| edu | dha | dha |3333 |200|jan |2017|33331
4| edu | dha | nara |4444 |250|jan |2017|44441
5| busi | dha | gazi |5555 |300|jan |2017|55551
这里,ZoneName是DivisionName的子集,DivisionName是DomainName的子集。有时只给出DomainName,有时会给出DomainName和DivisionName,并且大多数时候会给出DomainName,DivisionName,ZoneName这三个。我需要发布会员的GeneralSaving'和节约的DPS'加入两个表后,显然我无法发布相同月份的数据。一个人可以有两个或三个以上的帐号,但帐户号是唯一的。现在我如何在laravel 5.2中加入或合并两个表?
输出如下: DomainName = hem,DivisionName = raj,ZoneName = raj,Month = Feb,Year = 2017
MemberId|AccountNo|GeneralSaving|DPS
1111 |11111 |100 |100
2222 |22221 |100 |150
如果DomainName = busi,DivisionName = dha,Month = Feb,Year = 2017
MemberId|AccountNo|GeneralSaving|DPS
5555 |55551 |100 |300
6666 | |100 |
答案 0 :(得分:1)
试试这个......
SELECT s.MemberId, s.AccounNo, s.DPS, m.GeneralSaving
FROM member m
JOIN savings s ON CASE WHEN $DomainName != null THEN s.DomainName = $DomainName END
AND CASE WHEN $DivisionName != null THEN s.DivisionName = $DivisionName END
AND CASE WHEN $ZoneName != null THEN s.ZoneName = $ZoneName END
这里$ DomainName,$ DivisionName,$ ZoneName是用户输入。
答案 1 :(得分:0)
在laravel 5中,上述查询的sql将如下:
DB::table('member')
->leftjoin('savings', 'savings.MemberId', '=', 'member.MemberId')
->select('member.MemberId', 'savings.AccountNo', 'member.GeneralSaving', 'savings.Dps')
->where('savings.DomainName', '=', $DomainName)
->where('savings.DivisionName', '=', $DivisionName)
->where('savings.Month', '=', $Month)->where('savings.Year', '=', $Year)
->get
此查询已经在laravel 5中进行了测试,并且已经有效