繁体   English   中英

在多个表中选择不同的查询

[英]Select distinct query across multiple tables

我有一个用户模型,其名称,姓氏,电子邮件,以前的姓氏。 还有一个我可以为用户存储其他电子邮件的AdditionalEmail模型。 每个用户可以有多个其他电子邮件。 每个模型中分别设置有hasMany和belongsToMany关系。 我必须搜索姓氏,前姓,电子邮件和其他电子邮件。 我尝试使用可遏制的行为并创建了下表进行查询:

$options['joins'] = array(
    array(
        'table' => 'users',
        'alias' => 'User',
        'type' => 'LEFT',
        'conditions' => array('User.id = AdditionalEmail.user_id')
    ));
$options['conditions'] = array('OR' => array(
    'User.surname LIKE' => $search,
    'User.former_surnames LIKE' => $search,
    'User.email LIKE' => $search,
    'AdditionalEmail.email LIKE' => $search));
$options['recursive'] = -1;
$options['fields'] = 'DISTINCT User.username, User.name, User.surname, User.former_surnames';
$options['order'] = array('User.surname' => 'asc');

以上,但是对我不起作用。 我最终以查询结束:

SELECT DISTINCT users.* FROM users LEFT JOIN additional_emails ON ( users.id = additional_emails.user_id ) WHERE ((additional_emails.email LIKE  \''. $search .'\') OR (users.email LIKE \''. $search .'\') OR (users.surname LIKE \''. $search .'\') OR (users.former_surnames LIKE \''. $search .'\')) ORDER BY users.surname

可以的。 如何使用cakephp选项建立查询(或分页)。 问候皮奥特

 $this->User->find('all', 
     array(
         'fields' => array('DISTINCT *'), 
         'joins' => array(
               array(
                    'table' => 'additional_emails',
                    'alias' => 'Email',
                    'type' => 'left',
                    'conditions' => array('User.id = Email.user_id')
               ),
          ),
          'conditions' => array(
               'OR' => array(
                   'Email.email LIKE' => $search,
                   'User.email LIKE' => $search,
                   'User.surname LIKE' => $search,
                   'User.former_surnames LIKE' => $search,
                )
          ),
          'order' => array('User.surname'),
     )
 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM