Cakephp问题与“问题”;或;及;及;带查找函数的数组
正如Cakephp所建议的,我有一个列,我想在该列上放置“或”条件以匹配多个值,并将and条件与其他列进行匹配 SQL: CakePHP:Cakephp问题与“问题”;或;及;及;带查找函数的数组,cakephp,Cakephp,正如Cakephp所建议的,我有一个列,我想在该列上放置“或”条件以匹配多个值,并将and条件与其他列进行匹配 SQL: CakePHP: $conditions = array( 'OR' => array( 'SiteLogs.action like' => 'Facebook%' 'SiteLogs.action like' => 'Twitter%' ), 'SiteLogs
$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的手册弄糊涂了,谢谢你的帮助,先生。