按 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
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