在 mysql 查询中分组和排序

group by and order by in mysql query

我正在开发以 php 和 mysql 作为后端的约会网站。我有两个 table。第一个 table 是用户 table,所有用户信息都将存储在其中,其他 table 是 visituser table,如果一个用户查看另一个用户的个人资料,那么 visituser 中将有一个条目table。每次如果一个用户访问另一个用户的个人资料,那么 visituser table 中就会有一个条目。一个用户访问另一个用户将有多个条目。我的问题是我必须向访客显示一次最新的访问日期。我的查询如下 =>

SELECT
    a.*, b.onlinestatus,
    b.username,
    b.age
FROM
    tbl_visitprofile a
LEFT JOIN tbl_user b ON a.visitorid = b.id
WHERE
    b. STATUS != '2'
AND a.visitmemberid = '10'
AND a.visitorid NOT IN (
    SELECT
        user_id
    FROM
        tbl_pauseusers
)
AND a.blockstatus = '0'
GROUP BY
    a.visitorid
ORDER BY
    a.id DESC
LIMIT 0,
 12

如果我在这个查询中没有使用 group by,那么我得到的是最新的访问条目,但是如果我使用的是 group by,那么我没有得到最新的访问条目。我搜索了很多但没有在任何地方找到我的答案。任何帮助将不胜感激。提前致谢

您可以使用 MAX 组函数实现此目的。我已经稍微清理了查询,但从根本上说,这应该保留与之前相同的逻辑,同时稍微更可优化。只需将 a.date_time 更改为 table.

中的日期时间字段即可
SELECT
    a.visitorid,
    MAX( a.date_time ) AS last_visit_date_time,
    b.onlinestatus,
    b.username,
    b.age,

FROM tbl_visitprofile a

INNER JOIN tbl_user b
    ON b.id = a.visitorid
    AND b.STATUS != '2'

LEFT JOIN tbl_pauseusers p
    ON p.user_id = a.visitorid

WHERE a.visitmemberid = '10'
    AND a.blockstatus = '0'
    AND p.user_id IS NULL

GROUP BY a.visitorid
ORDER BY last_visit_date_time DESC
LIMIT 0 , 12;

这将按上次访问的 date/time 和最近的 return 12 对记录进行排序。