Cakephp问题与“问题”;或;及;及;带查找函数的数组

Cakephp问题与“问题”;或;及;及;带查找函数的数组,cakephp,Cakephp,正如Cakephp所建议的,我有一个列,我想在该列上放置“或”条件以匹配多个值,并将and条件与其他列进行匹配 SQL: CakePHP: $conditions = array( 'OR' => array( 'SiteLogs.action like' => 'Facebook%' 'SiteLogs.action like' => 'Twitter%' ), 'SiteLogs

正如Cakephp所建议的,我有一个列,我想在该列上放置“或”条件以匹配多个值,并将and条件与其他列进行匹配

SQL:

CakePHP:

$conditions = array(
        'OR' => array(
            'SiteLogs.action like' => 'Facebook%'
            'SiteLogs.action like' => 'Twitter%'
        ),
        'SiteLogs.created >=' => '2013-06-29'
    );
 $this->SiteLogs->find('all',
    'conditions' => $conditions,
    'group'     => 'ip address'
 )
生成的SQL只包含“twitter”数据的记录,因为“OR”数组的所有元素都具有相同的键,这将相互覆盖

生成SQL

SELECT `site_logs`.* FROM `site_logs` 
WHERE `site_logs`.`action` LIKE "Twitter%" AND  
    site_logs`.`created` >= "2013-06-29" 
GROUP BY `site_logs`.`ip address`

如何从“或”数组中获取所有值?我错过什么了吗

你要找的是这个。将相似的OR子句分别封装到各自的数组中,以防止键重叠

$conditions = array(
    'OR' => array(
        array('SiteLogs.action like' => 'Facebook%'),
        array('SiteLogs.action like' => 'Twitter%')
    ),
    'SiteLogs.created >=' => '2013-06-29'
);
$this->SiteLogs->find('all',
    'conditions' => $conditions,
    'group'     => 'ip address'
);
这应该会产生这样的SQL。在每个
LIKE
条件周围都有一组无关的括号,但这对于Cake来说是不可避免的,它根本不会影响查询的执行

SELECT * 
FROM site_logs 
WHERE 
    ((action LIKE "Facebook%") OR (action LIKE "Twitter%"))
    AND created >= "2013-06-29" 
GROUP BY "ip address"

你要找的是这个。将相似的OR子句分别封装到各自的数组中,以防止键重叠

$conditions = array(
    'OR' => array(
        array('SiteLogs.action like' => 'Facebook%'),
        array('SiteLogs.action like' => 'Twitter%')
    ),
    'SiteLogs.created >=' => '2013-06-29'
);
$this->SiteLogs->find('all',
    'conditions' => $conditions,
    'group'     => 'ip address'
);
这应该会产生这样的SQL。在每个
LIKE
条件周围都有一组无关的括号,但这对于Cake来说是不可避免的,它根本不会影响查询的执行

SELECT * 
FROM site_logs 
WHERE 
    ((action LIKE "Facebook%") OR (action LIKE "Twitter%"))
    AND created >= "2013-06-29" 
GROUP BY "ip address"

这不完全是一个答案,但您想要的SQL有点模棱两可。当您有多个AND&OR条件时,您应该将它们分组到集合中,以便清楚地知道您希望MySQL如何执行它们。在您的情况下,我认为您需要
WHERE(像a一样的操作或像b一样的操作)并创建>dt
。。。这与
WHERE action LIKE a或(action LIKE b AND created>dt)
@StevenMoseley:我被cakephp的手册弄糊涂了,谢谢你的帮助,先生。这不是一个确切的答案,但你想要的SQL有点含糊不清。当您有多个AND&OR条件时,您应该将它们分组到集合中,以便清楚地知道您希望MySQL如何执行它们。在您的情况下,我认为您需要
WHERE(像a一样的操作或像b一样的操作)并创建>dt
。。。这与
中像a或(像b和created>dt)这样的操作有很大不同
@StevenMoseley:我被cakephp的手册弄糊涂了,谢谢你的帮助,先生。