按组排序,不给出实际结果

时间:2017-02-09 09:00:08

标签: php mysql database

您好我试过这个查询:

<h1>1 Digit</h1>
<i class="circled-background">1</i>
<br><br>
<h1>2 Digits </h1>
<i class="circled-background">11</i>
<br><br>
<h1>3 Digits</h3>
<i class="circled-background">111</i>

我在表格中有两行:

SELECT 
    * 
FROM 
    (
        SELECT 
            * 
        FROM 
            specials_companies_mails 
        WHERE 
            `toId` = 1 && parentId <> 0 
        ORDER BY 
            specials_companies_mails.mailId DESC
    ) AS b 
GROUP BY 
    b.parentId

和查询后的结果:

mailID           subject        toId        parentId
3                test1          1           2
4                test2          1           2

其意思是

mailID           subject        toId        parentId
3                test1          1           2

不工作......它给我mailId 3而不是4 ......

该怎么办?

tnx很多

4 个答案:

答案 0 :(得分:2)

试试这个:

SELECT `a`.* FROM `specials_companies_mails` AS `a`
LEFT JOIN `specials_companies_mails` AS `b` ON
    `a`.`mailID` =  `b`.`mailID` AND
    `a`.`mailID` <  `b`.`mailID`
WHERE `b`.`mailID` IS NULL

答案 1 :(得分:2)

GROUP BY并不关心ORDER BY。所选记录将完全不确定。

您可以做的是为每个mainId找到最新的parentId,如下所示:

select a.* 
from specials_companies_mails AS a
left join specials_companies_mails AS b
    on  a.parentId = b.parentId
    and a.mailID < b.mailID
    and b.toId = 1 
    and b.parentId <> 0
WHERE b.parentId is null
    and a.toId = 1 
    and a.parentId <> 0

答案 2 :(得分:1)

group by不关心您之前是否订购过记录。它始终从保存在数据库中的第一条记录中获取信息。这是每个开发人员面临的痛苦事情,所以不要担心。

您可以通过几种方式解决问题。

  1. 将其拆分为2个单独的查询 - 第一个查询将按顺序排列,第二个查询将显示所选字段WHERE id IN (...)

  2. 将表specials_companies_mailsspecials_companies_mails联系起来,但这对性能不利并且很长。

  3. 不要对负责解析数据的代码进行分组和编写。

答案 3 :(得分:1)

如果你只想要最新的记录,那么试试这个:(我认为你不需要group by子句)

SELECT * 
        FROM 
            specials_companies_mails 
        WHERE 
            `toId` = 1 && parentId <> 0 
        ORDER BY 
            mailId DESC
       LIMIT 1