分组和加入表格的顺序

时间:2009-08-12 05:02:25

标签: mysql group-by

我在连接必须在Mysql中分组的表时排序结果时遇到问题。

这是我的表设置。

所有者表

  • owner_id | OWNER_NAME
  • 1 |测试所有者1
  • 2 |测试所有者2
  • 3 |测试所有者3

图片上传表

  • image_id | image_name | ownerid | UPLOAD_DATE
  • 1 | image1.jpg | 2 | 2009年4月8日
  • 2 | image2.jpg | 1 | 2009年4月8日
  • 3 | image3.jpg | 3 | 2009年4月8日
  • 4 | image4.jpg | 1 | 2009年4月8日
  • 5 | image5.jpg | 3 | 2009年4月8日

owner_id字段是自动增量,image_id字段也是如此。

我要做的是获取最后三张上传图片的owner_name,但不是同一所有者。因此,在该示例中,我希望它返回以下结果。

测试所有者3 测试所有者1 测试所有者2

在该示例中,要上载的最后一个所有者是测试所有者3,然后是测试所有者1,然后是测试所有者2.

我使用以下查询,但它没有返回正确的结果

$sql = "SELECT u.*, s.* FROM UPLOAD_TBL u, OWNER_TBL s WHERE u.ownerid = s.owner_id
GROUP BY s.owner_id ORDER BY u.image_id DESC LIMIT 0, 3";

非常感谢您设置此查询的任何帮助。

3 个答案:

答案 0 :(得分:1)

您应该只按owner_id进行分组,然后使用LIMIT 3的upload_date DESC进行排序

答案 1 :(得分:1)

如下:

select
     distinct(owner_id), owner_name
from
     owner
inner join
     images on images.ownerid = owner.ownerid
order by
     images.upload_date desc limit 3

答案 2 :(得分:1)

查看您是否可以对聚合图像ID进行排序:

select s.owner_id, s.owner_name, max(u.imag_id) as last_image_id
from UPLOAD_TBL u
inner join OWNER_TBL s on s.ownerid = u.owner_id
group by s.owner_id, s.owner_name
order by last_image_id desc
limit 3