LEFT JOIN (mysql) - PullRequest
       7

LEFT JOIN (mysql)

0 голосов
/ 05 марта 2012

Как уйти от присоединения?

Левый стол

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'));

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

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

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

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
1 голос
/ 06 марта 2012

Я был прав, проблема здесь - это ответ.Основная проблема была в группе

$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'));
...