2

テーブル名:グループ

id  name
1   ONE
2   TWO
3   THREE
4   FOUR
5   FIVE
6   SIX

テーブル名:タイトル

id  title           groups  isactive
1   First Title     1,2,4   yes
2   Second Title    2,5,7   yes
3   Third Title     3,1,2   yes
4   Fourth title    2,4,5   yes

リンク列:id

質問:

SELECT 
 t.*, g.name
FROM 
 `titles` AS t, groups AS g 
WHERE 
  t.groups REGEXP CONCAT('^', g.id, '')
ORDER by title ASC, name ASC

結果:

id  title           groups  isactive    name
1   First Title     1,2,4   yes         ONE
4   Fourth title    2,4,5   yes         TWO
2   Second Title    2,5,7   yes         TWO
3   Third Title     3,1,2   yes         THREE

ここで、問題は、グループごとに1つのタイトルのみを選択したいということですが、グループ番号TWOに割り当てられた(id = 4および2)のような重複したグループ名が存在する可能性があります。

IDの高いものだけを表示するにはどうすればよいですか?その場合、結果は次のようになります:(id = 2を除く)

id  title           groups  isactive    name
1   First Title     1,2,4   yes         ONE
4   Fourth title    2,4,5   yes         TWO
3   Third Title     3,1,2   yes         THREE

私もこのクエリを使用してみました:

SELECT 
 t.*, g.name
FROM 
 `titles` AS t, groups AS g 
WHERE 
  t.groups REGEXP CONCAT('^', g.id, '')
GROUP by g.name
ORDER by t.id DESC 

また

ORDER by t.id ASC

しかし、両方が示しています:

id  title           groups  isactive   name
3   Third Title     3,1,2   yes        THREE
2   Second Title    2,5,7   yes        TWO
1   First Title     1,2,4   yes        ONE

デモをご覧ください-SQLフィドル

4

1 に答える 1

1

これを試して

SELECT A.*, B.NAME FROM titles A
JOIN (
         SELECT g.name, max(t.id) id
         FROM titles AS t, groups AS g 
         WHERE t.groups REGEXP CONCAT('^', g.id, '')
         group by g.name
     ) B on A.id = b.id

SQLデモ

于 2013-02-08T22:13:24.937 に答える