mysql查询

时间:2017-01-09 11:40:15

标签: mysql group-by sql-order-by

我正在使用php和mysql作为后端在约会网站上工作。我有两张桌子。第一个表是用户表,其中将存储所有用户信息,而其他表是visituser表,其中如果一个用户查看另一个用户配置文件,则在visituser表中将有一个条目。每当一个用户访问另一个用户配置文件时,访问者表中就会有一个条目。一个用户访问另一个用户将有多个条目。我的问题是我要用最近的访问日期向访问者展示一次。我的查询在下面给出=>

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

如果我在此查询中没有使用该组,那么我将获得最新的访问条目,但如果我正在使用组,那么我没有获得最新的访问条目。我搜索了很多,但没有找到我的答案。任何帮助将不胜感激。提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用MAX组功能实现此目的。我已经清理了一下查询,但从根本上说,这应该保留你以前的逻辑,同时稍微更优化一下。只需更改表中日期时间字段的a.date_time即可。

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;

这将按上次访问的日期/时间排序记录,并返回最新的12.