1

私のデータベースは、ユーザーが完了したセクションを追跡します:

テーブル「ユーザー」:

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 経由で実行できるはずです。ティア!

4

2 に答える 2

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;
于 2013-05-10T01:39:12.883 に答える
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 ここ: http://sqlfiddle.com/#!2/dbb5a/2

于 2013-05-10T01:30:53.887 に答える