Cake PHP自动将id字段添加到sql查询
我在PHP2.1中有以下代码。我尝试获取唯一字符串消息的列表,删除所有重复项Cake PHP自动将id字段添加到sql查询,php,mysql,sql,cakephp,distinct,Php,Mysql,Sql,Cakephp,Distinct,我在PHP2.1中有以下代码。我尝试获取唯一字符串消息的列表,删除所有重复项 $this->loadModel('ErrorMessage'); $this->ErrorMessage->recursive = -1; $error_messages = $this->ErrorMessage->find('list', array( 'fields' => array('DISTINCT message'), ) ); 这将产生以下错误:
$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。消息
FROMintermate
错误消息
AS
`1号线的“错误”
SQL查询:选择ErrorMessage
id
,不重复ErrorMessage。
消息
FROMintermate
error\u消息
ASErrorMessage
其中1
=1
有趣的部分在生成的查询中;蛋糕已自动包含id字段
我单独测试查询,它生成预期结果:(唯一字符串列表)
以下是创建表格以供参考:
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;
所以问题是,为什么cake会自动包含id字段,我如何告诉cake不要这样做
我当然可以使用查询,但这不是“好的”。) 是的,CAKEPHP可以做到这一点,您可以使用GROUP BY子句来解决这个问题
$error_messages = $this->ErrorMessage->find('list', array(
'fields'=>'message',
'group' => 'message'));
除非在查询的“字段”部分指定了两个字段,否则Cake将始终在“列表”查询中包含id。如果在没有任何字段规范的情况下运行该查询,默认情况下,返回的结果将采用以下格式:
array(
'Model.id' => 'Model.name'
)
(除非已覆盖模型中的默认displayName)
在查询中指定两个不包含id的字段,例如
'fields' => array('ErrorMessage.message', 'ErrorMessage.message')
这将返回以下格式的数组:
array(
'Errormessage.message' => 'ErrorMessage.message'
)
要仅获取唯一消息,请使用分组方式:
'group' => array('ErrorMessage.message')
谢谢gazareth,我在这里也发现了一个类似的帖子:这个答案谈到使用Set类删除重复项。注意,最好使用Hash类而不是Set-它更快更好。
'group' => array('ErrorMessage.message')