Mysql 使用where子句在非键列上内部联接select

Mysql 使用where子句在非键列上内部联接select,mysql,join,Mysql,Join,我有下面的查询,它为我提供了一个总是使用最新条目作为引用的条目列表。(MAX(id))。。但是,max(id)并不总是neewest条目 那么,是否有可能获取具有最新日期的条目id(表中有一个unixtime日期字段) 当前查询 SELECT tr.id,user.ispro as ispro, user.id as user_id,tr.balance_e, user.paypal FROM tr RIGHT join user on tr.user_id=user.id INNER JOIN

我有下面的查询,它为我提供了一个总是使用最新条目作为引用的条目列表。(MAX(id))。。但是,max(id)并不总是neewest条目

那么,是否有可能获取具有最新日期的条目id(表中有一个unixtime日期字段)

当前查询

SELECT tr.id,user.ispro as ispro, user.id as user_id,tr.balance_e, user.paypal FROM tr
RIGHT join user on tr.user_id=user.id
INNER JOIN (SELECT MAX(id) as maxid FROM tr where tr.status='ok'
GROUP BY tr.user_id order by tr.date desc) la 
ON la.maxid = tr.id
WHERE tr.status='ok' and tr.balance_e >= ".$mincredit." 
ORDER BY tr.balance_e desc;
每次更新条目(日期)时,输出都不正确,因为内部联接使用MAX(id)。。。你知道如何更改它,使之始终具有日期字段为最新字段的条目id吗

试试这个:

SELECT 
  tr.id, 
  user.ispro as ispro, 
  user.id as user_id,
  tr.balance_e,
  user.paypal 
FROM tr
INNER JOIN 
(
   SELECT user_id, MAX(date) as maxdate
   FROM tr 
   where tr.status='ok'
   GROUP BY tr.user_id
) la ON tr.user_id = la.user_id AND tr.date = la.maxdate
RIGHT join user on tr.user_id=user.id 
WHERE tr.status     = 'ok'
  and tr.balance_e >= ".$mincredit." 
ORDER BY tr.balance_e desc;

与问题无关,但似乎可以用内部连接替换正确的连接,而不改变功能,但可能具有性能优势。