繁体   English   中英

在CakePHP查询中获取不同的不同DISTINCT结果

[英]Getting Different Different DISTINCT result in CakePHP query

我接受了答案。 但欢迎提出更多答案和建议。

我变得与众不同 - 在CakePHP查询中使用distinct时,MySQL结果不同。

我想做的是:获得date_generated字段的不同结果。

问题:查询1工作正常但是当我得到两个字段(date_generated,id)(参见查询2)时, 不同的结果不起作用。

查询1

$this->Purchase->find('all',array( 
                               'order' => array('Purchase.date_generated ASC'),
                               'fields' => array('DISTINCT Purchase.date_generated')));

查询1的结果 :在此结果中, date_generated不重复且工作正常。 请查看查询2。

Array
(
    [0] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 1970-01-01
                )

        )

    [1] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-17
                )

        )

    [2] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-18
                )

        )

    [3] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-19
                )

        )

    [4] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-22
                )

        )

    [5] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-29
                )

        )

    [6] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-08-01
                )

        )

)

查询2 :仅添加'Purchase.id'

$this->Purchase->find('all',array( 
                               'order' => array('Purchase.date_generated ASC'),
                               'fields' => array('DISTINCT Purchase.date_generated','Purchase.id')));

查询结果2 :在此结果中数组索引5,6,7 date_generated重复。

Array
(
    [0] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 1970-01-01
                    [id] => 9
                )

        )

    [1] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-17
                    [id] => 1
                )

        )

    [2] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-18
                    [id] => 2
                )

        )

    [3] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-19
                    [id] => 3
                )

        )

    [4] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-22
                    [id] => 4
                )

        )

    [5] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-29
                    [id] => 5
                )

        )

    [6] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-29
                    [id] => 6
                )

        )

    [7] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-06-29
                    [id] => 7
                )

        )

    [8] => Array
        (
            [Purchase] => Array
                (
                    [date_generated] => 2014-08-01
                    [id] => 8
                )

        )

)

这似乎是标准的sql行为。 第一个查询生成这样的东西

通过Purchase.date_generated ASC从采购订单中选择DISTINCT Purchase.date_generated

第二个产生这样的查询

通过Purchase.date_generated ASC从采购订单中选择DISTINCT Purchase.date_generated,Purchase.id

这些查询的结果正是您所获得的。 对于socond,它将返回不同的Purchase.date_generated和Purchase.id对。 因此,如果某个日期有几个购买ID,则每个购买ID都是不同的对。

因此,如果您仅在不同日期之后,则应使用第一个查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM