我正在尝试从数据库中获取用户拥有的最新证书。我只想看最新的一个,而不是所有其他的,所以我使用group-by,然后按主表中的唯一id排序。
没有团队,这是完美的。我看到上传的最后一个证书,然后是下面的所有其他证书。
当我通过添加群组时,我看到了有史以来第一个上传的证书,这是毫无意义的,因为它可能是几年前的。
我的查询很大,因为我从其他表中提取了很多其他信息。
这是我的疑问。
SELECT
usercert.*,
cert.*,
certCat.certCatName,
certTask.certTaskName ,
certStatus.certStatusName
FROM
`usercert`
INNER JOIN
cert
ON
cert.idcert = usercert.idcert
INNER JOIN
certCat
ON
certCat.idcertCat = cert.idcertCat
INNER JOIN
certTask
ON
certTask.idcertTask = usercert.idcertTask
INNER JOIN
certStatus
ON
certStatus.idcertStatus = usercert.idcertStatus
WHERE
usercert.iduser=%s
GROUP BY
usercert.idcert
ORDER BY
usercert.usercertEnd DESC
SELECT
usercert.*,
cert.*,
certCat.certCatName,
certTask.certTaskName ,
certStatus.certStatusName
FROM
`usercert`
INNER JOIN
cert
ON
cert.idcert = usercert.idcert
INNER JOIN
certCat
ON
certCat.idcertCat = cert.idcertCat
INNER JOIN
certTask
ON
certTask.idcertTask = usercert.idcertTask
INNER JOIN
certStatus
ON
certStatus.idcertStatus = usercert.idcertSttus
WHERE
usercert.iduser=%s
ORDER BY
usercert.usercertEnd
DESC limit 0,1
在这个查询中,它将按降序获取所有记录,这意味着最后插入的行将排在第一位,限制0,1意味着它将从0开始并获取1条记录,就这样。。。
您可以使用MAX()
:
SELECT ... FROM ... WHERE ... ORDER BY MAX(usercert.usercertEnd)
或LIMIT
:
SELECT ... FROM ... WHERE ... ORDER BY usercert.usercertEnd DESC LIMIT 1