如何按此顺序从Mysql检索结果?

如何按此顺序从Mysql检索结果?,mysql,sql,Mysql,Sql,我有一个带有列的表,我们称之为“query”,它是一个varchar 我希望以这样一种方式将这些值检索到分页列表中,每一页将包含208个结果,其中8个来自字母表中的每个字母 因此,在第1页上,前8个结果将以“a”开头,下8个结果将以“b”开头,依此类推,直到“z”(如果该字母没有任何结果,则它将继续到下一个字母) 在结果的第2页,它将显示接下来的8个结果,以“a”开头,下一个以“b”开头,依此类推 基本上不是按查询ASC排序,这将导致第一页的所有单词都以“a”开头,我希望每页都包含以字母表的每个

我有一个带有列的表,我们称之为“query”,它是一个varchar

我希望以这样一种方式将这些值检索到分页列表中,每一页将包含208个结果,其中8个来自字母表中的每个字母

因此,在第1页上,前8个结果将以“a”开头,下8个结果将以“b”开头,依此类推,直到“z”(如果该字母没有任何结果,则它将继续到下一个字母)

在结果的第2页,它将显示接下来的8个结果,以“a”开头,下一个以“b”开头,依此类推

基本上不是按查询ASC排序,这将导致第一页的所有单词都以“a”开头,我希望每页都包含以字母表的每个字母开头的单词


如果你觉得我没有正确地解释自己(我有!),那么请随意提问。我脑子里有这个想法,但要把它翻译成文字并不容易!

一个简单的开始方法可能是:

SELECT * FROM table1 WHERE `query` LIKE 'a%' ORDER BY `query` LIMIT 8
UNION
SELECT * FROM table1 WHERE `query` LIKE 'b%' ORDER BY `query` LIMIT 8
UNION
SELECT * FROM table1 WHERE `query` LIKE 'c%' ORDER BY `query` LIMIT 8
....
第二页需要使用

SELECT * FROM table1 WHERE `query` LIKE 'a%' ORDER BY `query` LIMIT 8,8
UNION
....
第三页:

SELECT * FROM table1 WHERE `query` LIKE 'a%' ORDER BY `query` LIMIT 16,8
UNION
....

等等。

您可以使用

group by left(query, 1)

在服务器端脚本中,显示查询结果的8个结果(可能通过使用页码*8并从每个字母的索引开始,即从第0页开始)

我认为这不可能在一条语句中完成(或者,可能是可能的,但执行速度太慢)。可能您必须查看MySQL准备的语句或更改页面行为。

我永远不会在大型数据集上使用此查询,但只是出于个人兴趣,我发现了以下解决方案:

select *,
ceil(row_num/8) as gr 
from (
select
*,
@num := if(@word = substring(word,1,1), @num + 1, 1) as row_num,
@word := substring(word,1,1) as w
from words,(select @num:=0,@word:='') as r order by word ) as t
order by gr,word