Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 跨多个表选择不同的查询_Mysql_Cakephp_Join_Distinct - Fatal编程技术网

Mysql 跨多个表选择不同的查询

Mysql 跨多个表选择不同的查询,mysql,cakephp,join,distinct,Mysql,Cakephp,Join,Distinct,我有一个名字,姓氏,电子邮件,前_姓的用户模型。还有一种额外的电子邮件模型,我在其中为用户存储额外的电子邮件。每个用户可以有多封额外的电子邮件。在每个模型中分别存在hasMany和BelongMathany集的关系。 我必须搜索姓氏、以前的姓氏、电子邮件和其他电子邮件。我尝试使用containable行为,并为查询创建了下表: $options['joins'] = array( array( 'table' => 'users', 'alias'

我有一个名字,姓氏,电子邮件,前_姓的用户模型。还有一种额外的电子邮件模型,我在其中为用户存储额外的电子邮件。每个用户可以有多封额外的电子邮件。在每个模型中分别存在hasMany和BelongMathany集的关系。 我必须搜索姓氏、以前的姓氏、电子邮件和其他电子邮件。我尝试使用containable行为,并为查询创建了下表:

$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选项为find(或paginate)构建此查询。 当做 皮奥特

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