1

このようなテーブル (グループ化なしで表示) があり、MySQL 5.5 を使用しています。

mytable
================================================================================
id    type     parent_type     type_id     content                     parent_id
================================================================================
1     type1    NULL            3           john's test content         NULL
2     type1    NULL            3           hi there, this is john      NULL
3     type2    ptype1          4           john@gmail.com              2
4     type3    ptype1          2           John Smith                  2
5     type3    ptype1          8           Sean John John              10
6     type3    ptype1          13          John Smith                  11

parent_type最初にすべての行をグループ化し、parent_id次にtypeand でグループ化したいと思いtype_idます。Parent_typeparent_idなる場合もありますNULLが、NULLsグループ化しないでください。

現時点で私が試していることは次のとおりです。

SELECT id, type, IFNULL(parent_type, UUID()) as parent_type, type_id, content, IFNULL(parent_id, UUID()) as parent_id
FROM mytable
WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id, type_index, type_id LIMIT 10 ;

しかし、望ましい結果は、結果を最初に and でグループ化し、次に and でグループ化するparent_typeことです。parent_idparent_typeparent_id

mytable
================================================================================
id    type     parent_type     type_id     content                     parent_id
================================================================================
1     type1    NULL            3           john's test content         NULL
3     type2    ptype1          4           john@gmail.com              2
5     type3    ptype1          8           Sean John John              10
6     type3    ptype1          13          John Smith                  11

これはどのように行うことができますか?

4

1 に答える 1

0

サブクエリを使用すると、うまくいきました:

SELECT *
FROM (
     SELECT id, type, type_id, content, MATCH(content) AGAINST('john') as relevance, IFNULL(parent_type, UUID()) as parent_type, IFNULL(parent_id, UUID()) as parent_id
     FROM mytable WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id
) as search
GROUP BY search.type, search.type_id DESC  LIMIT 10 ;
于 2012-04-20T06:56:38.487 に答える