2012-03-05 5 views
0

Как левый joing?LEFT JOIN (mysql)

левый стол

SELECT TYPE , days 
FROM leavetypes 


type days 
anual 10 

casual 6 

sick 10 

таблице справа

SELECT sub_leave_type, (
SUM(working_days) 
) AS used 
FROM vacations 
WHERE `user_id` = '1' 
AND `from_date` 
BETWEEN '2012-01-01' 
AND '2012-12-31' 
GROUP BY sub_leave_type 


sub_leave_type  used 

anual    3 

casual    6 

на самом деле я делаю это на CakePHP это мой код.

$allleaves = $this->Leavetype->find('all', array(
     'joins' => array(
      array(
       'table' => 'vacations', 
       'alias' => 'vacationsJoin', 
       'type' => 'left', 
       'conditions' => array('vacationsJoin.sub_leave_type = Leavetype.type') 
      ) 
     ), 
     'conditions' => array(
      'vacationsJoin.user_id' => $_SESSION['Auth']['User']['id'], 
      'vacationsJoin.from_date BETWEEN ? and ?' => array(date('Y') . '-01-01', 
       date('Y') . '-12-31') 
     ), 
     'fields' => array('type', 'days', '(SUM(working_days)) as used'), 
     'group' => 'sub_leave_type', 
      )); 

    $this->set(compact('allleaves')); 

Это не из-за то, что я хочу, я хочу это все строки из левой таблицы и другие из таблицы каникул

+0

Что именно вам нужно? Как вам нужно присоединиться к этим таблицам? Что вы пробовали и что не сработали? LEFT JOIN - это то же самое в MySQL, что и в большинстве других диалектов SQL, вы можете просто написать его, как вы привыкли, и он должен работать. –

+0

Вы также можете ответить на свой вопрос. –

ответ

1

Я был прав, проблема здесь в ответе. Основная проблема была в ГРУППЕ

$allleaves = $this->Leavetype->find('all', array(
     'joins' => array(
      array(
       'table' => 'vacations', 
       'alias' => 'vacationsJoin', 
       'type' => 'left', 
       'conditions' => array('vacationsJoin.sub_leave_type = Leavetype.type', 
        'vacationsJoin.user_id' => $_SESSION['Auth']['User']['id'], 
      'vacationsJoin.from_date BETWEEN ? and ?' => array(date('Y') . '-01-01', 
       date('Y') . '-12-31'),'vacationsJoin.status'=>'approved' 
        ) 
      ) 
     ), 

     'fields' => array('type', 'days', '(SUM(working_days)) as used'), 
     'group' => 'type' 
      )); 
    $this->set(compact('allleaves')); 
3

Пожалуйста, прочитайте этот запрос и изменить его в соответствии с вашим требованием

SELECT column_name(s) 
FROM table_name1 
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name