按 MySQL 个特殊组排序

sort by MySQL special group

Table A 显示我在 MySQL 中 运行 以下 SQL 的结果。

SELECT * FROM table 
WHERE MATCH (title) AGAINST ('marka tv')

Table一个

Table B 显示我想要得到的结果。如您所见,这些组是按循环顺序排列的。

Table B

如果我理解这个问题,您想对输出进行排序,以便组采用循环方式而不是按顺序排列。您可以通过枚举每个组中的值然后使用该信息进行排序来做到这一点:

SELECT t.*
FROM (SELECT t.*,
             (@rn := if(@g = groups, @rn + 1,
                        if(@g := groups, 1, 1)
                       )
             ) as rn
      FROM table t CROSS JOIN
           (SELECT @rn := 0, @g := '') params
      WHERE MATCH (title) AGAINST ('marka tv')
      ORDER BY groups
     ) t
ORDER BY rn, groups;

考虑派生 table 中的子查询来计算要在最终 table 处排序的组号:

SELECT f.*
FROM
    (SELECT t1.* ,
          (SELECT count(*)
           FROM table t2
           WHERE (t2.title <= t1.title) 
           AND (t1.groups = t2.groups)) AS groupNo
     FROM table t1
     WHERE MATCH (t1.title) AGAINST ('marka tv')
     ) AS f
ORDER BY groupNo, groups