我在蛋糕php 2.1中有以下代码。我尝试获取唯一字符串消息的列表,所有重复项均已删除。
$this->loadModel('ErrorMessage');
$this->ErrorMessage->recursive = -1;
$error_messages = $this->ErrorMessage->find('list',
array(
'fields' => array('DISTINCT message'),
)
);
产生以下错误:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您
您的SQL语法有错误;检查对应的手册
您的MySQL服务器版本,以在'DISTINCT附近使用正确的语法
ErrorMessage. message
从intermatte
。error_messages
AS第1行的“ ErrorMes”
SQL查询:SELECT
ErrorMessage
。id
,DISTINCT ErrorMessage. message
FROM intermatte
。error_messages
AS ErrorMessage
在哪里1= 1
有趣的部分是在生成的查询中; Cake已自动包含id字段!
我单独测试查询,它会产生预期的结果:(唯一字符串列表)
SELECT DISTINCT message FROM error_messages;
这是创建表供参考:
CREATE TABLE `error_messages` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`message` MEDIUMTEXT NULL COLLATE 'utf8_unicode_ci',
`figure` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created` DATETIME NULL DEFAULT NULL,
`modified` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT;
所以问题是,为什么蛋糕会自动包含id字段,我如何告诉蛋糕不要这样做?
我当然可以使用查询,但这不是“不错”。 ;)
最佳答案
是的,CAKEPHP将做到这一点,您可以做的是使用GROUP BY子句来解决此问题,
$error_messages = $this->ErrorMessage->find('list', array(
'fields'=>'message',
'group' => 'message'));
关于php - Cake PHP自动将ID字段添加到SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24207033/