我有这两个表
字段“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(最后一个用户与总数最多的类别相关联)
谢谢,
三通
答案 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