MySQL:每组最多一个?两张桌子

时间:2013-05-10 01:28:25

标签: mysql

我的数据库跟踪用户已完成的部分:

表'用户':

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!

2 个答案:

答案 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;