DISTINCT在联接查询Cakephp中不起作用

DISTINCT在联接查询Cakephp中不起作用,cakephp,cakephp-2.0,distinct,cakephp-2.1,Cakephp,Cakephp 2.0,Distinct,Cakephp 2.1,我正在开发一个Cakephp 2.x,我是Cakephp的新手,很难掌握cake查询方法。我已经实现了一个连接查询,但distinct在这里不起作用,这是我的代码 我真正想做的是: 我有一个表名Messages,其中字段Message中有重复的数字。mobileNo。。。我只想选择不同的数字,然后在这些不同数字的基础上比较或加入联系人表,其中有mobileNo、workNo等字段,并检查这些数字是否在联系人表中。。如果他们要帮我取联系人的名字,希望你能理解 所以我所做的是。。。我正试图根据dis

我正在开发一个Cakephp 2.x,我是Cakephp的新手,很难掌握cake查询方法。我已经实现了一个连接查询,但distinct在这里不起作用,这是我的代码

我真正想做的是:

我有一个表名Messages,其中字段Message中有重复的数字。mobileNo。。。我只想选择不同的数字,然后在这些不同数字的基础上比较或加入联系人表,其中有mobileNo、workNo等字段,并检查这些数字是否在联系人表中。。如果他们要帮我取联系人的名字,希望你能理解

所以我所做的是。。。我正试图根据distnct number of Messages表获取联系人的行

function getRecentMessages($userid){
    $this->bindModel(array(
        'belongsTo' => array(
            'Contact' => array(
                'className' => 'Contact',
                'foreignKey' => false,
                'conditions' => array(



                    'AND' =>
                    array(
                        array('OR' => array(
                            array('Message.mobileNo = Contact.mobileNo'),
                            array('Message.mobileNo = Contact.workNo'),
                            array('Message.mobileNo = Contact.homeNo'),
                            array('Message.mobileNo = Contact.other'),
                        )),


                    )


                ),
                'type' => 'LEFT',
                'order'=>'Message.idTextMessage DESC',


            )
        )
    ), false);

    return $this->find('all', array('conditions' => array('Message.User_id' => $userid),
            'contain' => array('Contact' ),
        'fields' => array(' DISTINCT Message.mobileNo',//distnct not working 
            'Contact.mobileNo',
            'Contact.workNo',
            'Contact.homeNo',
            'Contact.other',
            'Contact.name',
            'Message.dateTime',
            'Message.type',
            'Message.body'),

        'limit' => 6));


}
我试过这个

DISTINCT (Message.mobileNo) as mobileNo
但也不管用

我试过了

     'group' => 'Message.mobileNo',   

通过使用此选项,它可以工作,但查询无法获得所需的结果。。我的意思是,SQL Server中的DESC条件不起作用,然后

DISTINCT
应用于从结果集中返回的整行。因此,如果您的数据包含,例如:

mobileNo workNo homeNo name     ... 
1234     1234   5678   Joe      ...
1234     867    5309   Stacy    ...  
1        555    5555   Sentinel ...         
您的
DISTINCT
不会删除Joe或Stacy,因为整行不相等。另一方面,如果您的数据包含:

mobileNo workNo homeNo name     ... 
1234     1234   5678   Joe      ...
1234     1234   5678   Joe      ...
1234     1234   5678   Joe      ...
1234     1234   5678   Joe      ...
1234     1234   5678   Joe      ...
1234     867    5309   Stacy    ...  
1        555    5555   Sentinel ...
您的查询将只返回一个名为“Joe”的条目,因为它将只返回结果集中不同的行

你应该知道,在SQL中,我通常认为一个代码<不同的< /代码>。这通常是SQL被修改的证据,以产生作者认为正确的结果,但查询并不能真正代表他们的意图

所以我必须问你,在你的查询中添加一个DISTINCT的目的是什么?或者,更好地想象一下,如果要求您只返回下表中不同的
mobileNo

mobileNo workNo homeNo name     ... 
1234     1234   5678   Joe      ...
1234     867    5309   Stacy    ...  
1        555    5555   Sentinel ...         
如果您是SQL数据库,您不会返回哪一行?你会拒绝斯泰西还是乔?这是
DISTINCT
查询的基本问题-数据库无法知道要排除哪一行。根据您提供的信息,它不能只返回不同的
mobileNo
s,因为两个名称不同但
mobileNo
相同的行都可以被排除

X-Y问题 所以,问问自己,你到底想解决什么问题?我怀疑你在这里的帖子是所谓X-Y问题的一个典型例子。这是我遇到的关于这个问题的最好的例子,我在下面复制了它:

这是怎么一回事? 问题是询问您尝试的解决方案,而不是实际问题

也就是说,您正试图解决问题
X
,并且您认为解决方案
Y
会起作用,但当您遇到麻烦时,您不是询问
X
,而是询问
Y

问题 这可能会导致试图帮助您解决问题的人感到沮丧,因为当您询问问题时,您需要帮助的解决方案可能与您试图解决的问题没有任何明显的联系

如何避免 为避免落入此陷阱,请始终在尝试任何解决方案时包含更广泛的信息。如果有人询问更多信息,特别是一个更具体的问题,请提供详细信息。如果您认为会有其他解决方案被建议,并且您已经排除了这些解决方案,那么不要试图避免再次检查它们——而是说明您排除这些解决方案的原因,因为这会提供更多关于您的需求的信息,并帮助其他人提供更好的答案

一个例子 最近的IRC对话,用于说明:


是否有函数返回两个分隔符之间的字符串

我不明白你的意思,但我怀疑已经有函数了

分割

分区也一样

我尝试了分区
我试图使用内置函数来获取字符串“attribute1:50.223,attribute2:442.1”中类似于以下内容的数字

为什么不直接解析字符串呢

我想可能有一些内置的解析功能

pairs=[x.strip()表示s.split(“,”)中的x;attribs={k:v代表x成对代表k,v代表x.split(“:”)}
虽然有一些库,但如果您不关心错误处理的话,简化格式就足够容易了
如果可能,最好将源代码更改为使用众所周知的格式,例如json或yaml

此代码实际上来自HTML
但我不知道如何用HTMLParser或其他什么来解析Javascript

它仅仅是嵌入到html中,还是被破坏的html版本

它被嵌入到HTML中

如果是javascript(也就是说,除了缺少外部大括号之外),json可能可以解析它

谢谢

我没有明确地说:json只解析数据结构,而不是js代码

我只需要解析一个数据结构


问题真正在于如何解析Javascript数据结构,而不是找到“两个分隔符之间的字符串”,但要找到真正的问题需要相当多的时间和直觉

这在完全互动的聊天中更容易做到(无论采用何种模式),但在SE站点上,您可以稍微润色一篇文章,发布它,然后在反馈之前有5-30分钟或更长的时间,这确实有助于从一开始就朝着正确的方向前进

根据您的查询,我相信您实际上并没有试图找到不同的
mobileNo