您好我试过这个查询:
<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很多
答案 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不关心您之前是否订购过记录。它始终从保存在数据库中的第一条记录中获取信息。这是每个开发人员面临的痛苦事情,所以不要担心。
您可以通过几种方式解决问题。
将其拆分为2个单独的查询 - 第一个查询将按顺序排列,第二个查询将显示所选字段WHERE id IN (...)
将表specials_companies_mails
与specials_companies_mails
联系起来,但这对性能不利并且很长。
不要对负责解析数据的代码进行分组和编写。
答案 3 :(得分:1)
如果你只想要最新的记录,那么试试这个:(我认为你不需要group by子句)
SELECT *
FROM
specials_companies_mails
WHERE
`toId` = 1 && parentId <> 0
ORDER BY
mailId DESC
LIMIT 1