mySQL - 在确保字段唯一的同时获取数据

时间:2011-06-16 22:27:06

标签: mysql

我有这两个表

字段“id,category,total”的类别
用户名为“id,category_id,title”的用户

类别是用户可以选择的类别列表 每次用户选择某个类别时,我们都会增加总计数器。 (即受欢迎程度)

如何根据categories.total和user.id获取每个类别的唯一用户数据需要是最新的?

这就是我所拥有的。除此之外几乎抓住了第一个用户ID。

select users.id from users left join categories on users.category_id = categories.id group by users.category_id order by categories.total desc

为了说明,这是一个例子:
类别表具有以下值
id = 1,category = free,total = 3
id = 2,category = expensive,total = 1
id = 3,category = cute,total = 2

用户表具有以下值
id = 1,category_id = 1,title = aello
id = 2,category_id = 2,title = bello
id = 3,category_id = 3,title = zello
id = 4,category_id = 1,title = gello
id = 5,category_id = 3,title = cello
id = 6,category_id = 1,title = fello

我的sql查询返回以下用户:1,3,2(与总数最多的类别关联的第一个用户)

但是,我想要的结果是:6,5,2(最后一个用户与总数最多的类别相关联)

谢谢,
三通

2 个答案:

答案 0 :(得分:2)

你的要求让我感到困惑......所以我不确定这是否真的完成你想要的......但它应该返回(6,5,2)(没有特别的顺序)。如果排序很重要,请添加“ORDER BY category_id”或其他内容。

SELECT MAX(id)
FROM users
GROUP BY category_id;

要解决您的评论,请尝试此操作(未经测试,因为我没有在任何地方安装MySQL):

SELECT *
FROM users
WHERE id = (
    SELECT MAX(id)
    FROM users
    GROUP BY category_id
);

答案 1 :(得分:1)

select users.id from users left join categories on users.category_id = categories.id group by users.category_id order by users.id, categories.total desc

...或者也许是这样,如果你想让用户ID从最低类别开始到最高类别。

select users.id from users left join categories on users.category_id = categories.id group by users.category_id order by categories.total asc