簡體   English   中英

應用左連接以使用其外鍵從多個表中提取數據

[英]Apply left join to extract data from multiple tables using their foreign key

我有一個表TblOrders,它有兩個字段,如FldOrderStatusId和FldInstrumentID,分別作為來自名為TblOrderStatus和TblInstrumentMasters的表的外鍵。 是否可以離開桌子加入。 代碼如下:

$find_filled_orders = $this->UserOrder->query(
    "Select distinct(FldOrderNumber) from TblOrders where FldOrderStatusId =12 ");
$res_order="";
$i=0;
foreach($find_filled_orders as $order_arr)
{
    if($i!=0)
    {
        $res_order.=",";
    }
    $res_order.="'".$order_arr['TblOrders']['FldOrderNumber']."'";
    $i++;               
 }
 $where_not_in="";
 if($i>=1)
 {              
     $where_not_in =  "AND FldOrderNumber NOT IN (".$res_order.")";
 }
 //debugbreak(); 
 $current_order = $this->UserOrder->query(
     "Select * from TblOrders where 1 ".$where_not_in.
     " group by FldOrderNumber order by FldSlNo  desc"); 

我想在最后一行查詢中應用左連接。 請伙計們幫助我。 提前致謝。

你確定你在使用Cake嗎? O_o對於這樣一個簡單的查詢,不需要原始的sql。 如果您的表和鍵名遵循Cake的約定,那么Cake會在您的控制器中使用幾個鏈式方法為您完成所有操作。

我甚至不確定你要完成什么,但我認為你只想提取所有用戶未填寫的儀器訂單的所有狀態,或者什么?

在Cake中只需要手動構建查詢,更不用說准備這樣的字符串了。 讓框架做繁重的工作。 如果需要,可以將$ find_filled_orders編寫為嵌套的SELECT語句(Cake為其提供優雅的支持)。 否則,你只需要重新調整你的表/模型,這樣你就可以正確地關聯它們,讓Cake完成其余的工作。

你沒有表明你想如何調用樂器,所以我不能更具體。 但是,如果你定義它們並且正確命名所有內容,Cake會自動為關聯模型生成連接。 通過在Orders中添加名為user_id的列來暗示訂單和用戶之間的關系。 對於instruments_id和status_id,如果需要,對於表Users- order_id等也是如此.Cake “外鍵”列實際上不必定義在db中約束的外鍵,甚至包含任何數據。 如果它讓你高興,讓它們全部為空。

$current_order = $this->Order->find('all', array(
    'conditions'=>array(
        'Order.status_id != 12',
        'Order.status_id'=>'Status.id', 
        'Order.instrument_id'=>'Instrument.id'
        ),
    'fields'=>array('DISTINCT (Order.number) as number', 'name', 'other'),
    'group'=> 'Order.number',
    'order'=>'Order.fld_sl_no DESC'
    )
);

(小組和DISTINCT - 在現實生活中,不需要兩者。為了展示,我把它們都放進去。)

http://book.cakephp.org/view/1002/Creating-Database-Tables

http://book.cakephp.org/view/1030/Complex-Find-Conditions

HTH。 :)

暫無
暫無

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

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