我的数据库跟踪用户已完成的部分:
表'用户':
id user_id sections_id
//
4 46 1
5 46 2
6 46 4
7 46 5
//
表'部分':
id header_id name
1 1 1/3
2 1 2/3
3 1 3/3
4 2 1/3
5 2 2/3
6 2 3/3
以下查询
SELECT a.sections_id
,b.header_id
FROM users a
JOIN sections b
ON a.sections_id = b.id
WHERE a.user_id = 46;
// a.user_id can be just user_id, but added for clarity
给我:
sections_id header_id
1 1
2 1
4 2
5 2
我想要的是特定用户的每个标头的最大部分ID,以便我知道我需要为用户提供哪个部分:
sections_id header_id
2 1
5 2
我认为这是每组最大问题,但我不能完全理解解决方案。我可以将所有数据都放到我的PHP中并从那里解析出来,但似乎我应该可以通过SQL来完成它。 TIA!
答案 0 :(得分:1)
这是一个简单的group by
查询:
SELECT s.header_id, max(u.sections_id)
FROM users u JOIN
sections s
ON u.sections_id = s.id
WHERE u.user_id = 46
group by s.header_id;
我还将您的别名更改为表格的首字母。这使得查询更容易理解。
编辑:SQLFiddle Here:http://sqlfiddle.com/#!2/dbb5a/2
答案 1 :(得分:1)
您可以使用max()函数
添加group by子句SELECT max(a.sections_id)
,b.header_id
FROM users a
JOIN sections b
ON a.sections_id = b.id
WHERE a.user_id = 46
GROUP BY header_id;