【问题标题】:LEFT JOIN (mysql)左连接(mysql)
【发布时间】:2012-03-05 09:54:04
【问题描述】:

如何离开?

左桌

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

这不是我想要的,我想要的是左表的所有行和假期表中的其他行

【问题讨论】:

  • 您到底需要什么?你需要如何加入这些表?你尝试了什么,什么没有奏效? LEFT JOIN 在 MySQL 中与在大多数其他 SQL 方言中相同,您可以按照习惯编写它,它应该可以工作。
  • 您也可以回答自己的问题。

标签: mysql cakephp cakephp-1.3


【解决方案1】:

请阅读此查询并根据您的要求进行更改

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

【讨论】:

    【解决方案2】:

    我是对的,这里的问题就是答案。主要问题出在 GROUP

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多