1

我目前遇到以下问题:我有两个表:

人
  - uid
  - 名
  - 姓
邮件
  - uid(自动增量)
  - to_person -> 与 person.uid 的 1:1 关系
  - from_person -> 与 person.uid 的 1:1 关系

如何获取 uid=1 的人的所有邮件,按 mail.uid DESC 排序并按 person.uid 分组?我试过以下:

SELECT a.first_name,a.last_name,b.uid
FROM person as a, mail as b
WHERE
  (b.to_user=a.uid OR b.from_user=a.uid) AND
  (b.to_user=1 OR b.from_user=1) AND
  a.uid!=1
GROUP BY a.uid
ORDER BY b.uid DESC

它确实给了我确切的人数,但订购最新邮件不起作用。

任何人都可以给我一个想法如何解决这个问题?

谢谢,多米尼克

编辑:

如果有人有同样的问题,我的解决方案在这里有效:

SELECT a.uid,a.first_name, a.last_name, b.max, c.tstamp, c.to_user, c.from_user
FROM person a
INNER JOIN
  (SELECT MAX(uid) max, to_user,from_user, IF(to_user=13,from_user,to_user) AS other_user, tstamp
  FROM mail
  WHERE (to_user=13 OR from_user=13) AND deleted=0 AND hidden=0
  GROUP BY GREATEST(to_user,from_user), LEAST(to_user,from_user)
  ORDER BY max DESC) AS b ON b.other_user=a.uid
INNER JOIN
  tx_intranet_domain_model_mailentry as c ON c.uid=b.max 
WHERE a.deleted=0 AND a.disable=0
4

1 回答 1

0

这是因为在您的子查询中您没有选择时间戳,这就是为什么它无法识别并且您订购的原因不起作用:

(SELECT x.uid,x.from_user,x.to_user,x.timestamp FROM mail as x ORDER BY x.uid DESC)
                                    ^^^ add here timestamp

或者你可以做

(SELECT x.* FROM mail as x ORDER BY x.uid DESC)

当您选择所有字段时。

那么你也可以使用join。

于 2013-09-04T09:40:50.803 回答