2

表名:组

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

表名:titles

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

现在,问题是我只想为每个组选择一个标题,但是,可能有重复的组名,例如(id = 4 和 2)都分配给组号 TWO。

如何只显示具有高 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 FIDDLE

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 回答