簡體   English   中英

如何在Laravel 5中的聯接查詢中獲取最大ID(違反完整性約束:)

[英]How to get the max ID in a Join Query in Laravel 5 (Integrity constraint violation:)

我的查詢是這樣的:

$deals=DB::table('leadsheet')
            ->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
             ->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
             ->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
              ->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode')
             ->where('id', DB::raw("(select max(`id`) from vipbooking)"))
           ->where('leadsheet.leadcat', '=','Delegates')

            ->get();

所以我有下表:

1.leadsheet 
   -- leadcode
   -- leadcat
2.Deal
   -- leadcode
3.benefits
   -- leadcode
4.delegatedealinfo
   -- leadcode
5.vipbooking
   -- leadcode

我正在試圖做的是讓所有的最大的ID vipbooking形式,其中leadcode是相同的所有leadcode FROM leadsheet WHERE leadsheet leadcat =代表

我唯一的問題是vipbooking表單的MAX ID不起作用

誰能幫我一個忙

UPDATE1

應用@anant提供的解決方案后

錯誤

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `leadsheet` inner join `Deal` on `leadsheet`.`leadcode` = `Deal`.`leadcode` inner join `benefits` on `leadsheet`.`leadcode` = `benefits`.`leadcode` inner join `delegatedealinfo` on `leadsheet`.`leadcode` = `delegatedealinfo`.`leadcode` inner join `vipbooking` on `leadsheet`.`leadcode` = `vipbooking`.`leadcode` where `id` = (select MAX(id) AS vipid from vipbooking) and `leadsheet`.`leadcat` = Delegates)

改寫問題

我想獲取代表用戶的交易的vipbooking表單的詳細信息,我們可以從Leadsheet表中找到交易是供應商還是代表

Leadsheet

id | leadcode | leadcat

1  | DL2016012| Delegates
2  | DL2016013| Delegates
3  | VL2016001| Vendors
4  | VL2016002| Vendors

交易

id | leadcode | DealAmount

1  | DL2016012| 123
2  | VL2016002| 1000
2  | DL2016013| 1200

vipbooking

    id | leadcode | date      | bookingtxt

    1  | DL2016012| 20-04-2016| xxx
    2  | DL2016012| 20-04-2016| dddd
    3  | VL2016012| 21-04-2016| ppp
    4  | DL2016013| 20-04-2016| xxx
    5  | DL2016013| 22-04-2016| dddd

所以我的輸出應該有

 2 123 | Delegates| DL2016012| 20-04-2016| dddd
 5 1200| Delegates| DL2016013| 22-04-2016| dddd

謝謝

您可以嘗試使用兩個查詢。

$vipBookingMaxId = DB::table('vipbooking')
        ->select(DB::raw("MAX(`id`) AS maxId"))
        ->get();
$maxId = (null != $vipBookingMaxId) ? $vipBookingMaxId->maxId : 0;
$dealsQuery = DB::table('leadsheet')
        ->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
        ->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
        ->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
        ->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode');

if ($maxId) {
    $dealsQuery->where('id', $vipBookingMaxId->maxId);
}

$deals = $dealsQuery->where('leadsheet.leadcat', '=', 'Delegates')->get();

希望對您有幫助。

嘗試這個

$deals=DB::table('leadsheet')
            ->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
             ->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
             ->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
              ->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode')
             ->where('leadsheet.id', DB::raw("(select max(`id`) from vipbooking)"))
           ->where('leadsheet.leadcat', '=','Delegates')

            ->get();

添加了leadsheet.id

暫無
暫無

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

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