正如Cakephp的manual所建议的那样,我有一个列,我想在该列上放置"OR“条件,以便将多个值与and条件与其他列进行匹配。
SQL:
SELECT * FROM site_logs
WHERE action LIKE "Facebook%" OR action LIKE "Twitter%" AND
created >= "2013-06-29"
GROUP BY "ip address"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“数组中获得所有的值?我是不是遗漏了什么?
发布于 2013-06-29 23:26:55
你要找的是这个。将每个相似的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条件周围都有一组无关的括号,但对于LIKE来说这是不可避免的,而且它根本不会影响查询的执行。
SELECT *
FROM site_logs
WHERE
((action LIKE "Facebook%") OR (action LIKE "Twitter%"))
AND created >= "2013-06-29"
GROUP BY "ip address"https://stackoverflow.com/questions/17381379
复制相似问题