Как получить результаты из Mysql в этом порядке? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть таблица со столбцом, давайте назовем ее «запрос», что является varchar.

Я хотел бы извлечь значения в разбитый на страницы список таким образом, чтобы каждая страница содержала 208 результатов, по 8 от каждой буквы в алфавите.

Итак, на странице 1 первые 8 результатов начнутся с «a», следующие 8 начнутся с «b» и так далее до «z» (если для этой буквы нет результатов, то просто продолжается на следующую букву.

На странице 2 результатов будут показаны следующие 8 результатов, начинающиеся с "a", следующие с "b" и т. Д.

По сути, вместо сортировки по запросу ASC, в результате чего на первой странице будут все слова, начинающиеся с «а», я бы хотел, чтобы каждая страница содержала слова, начинающиеся с каждой буквы алфавита.

Если вы чувствуете, что я не объясняю себя должным образом (да!), Тогда, пожалуйста, не стесняйтесь спрашивать. У меня есть идея в голове, но нелегко перевести ее на слова!

Ответы [ 4 ]

1 голос
/ 19 июля 2011

Наивный стартовый подход может быть следующим:

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

и т. Д.

0 голосов
/ 19 июля 2011

Я бы никогда не использовал этот запрос для большого набора данных, но просто для личного удовольствия я нашел это решение:

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
0 голосов
/ 19 июля 2011

Я думаю, что это невозможно сделать в одном выражении (или, возможно, возможно, но слишком медленно в выполнении).Может быть, вы должны взглянуть на подготовленные MySQL операторы или изменить поведение страницы.

0 голосов
/ 19 июля 2011

Вы можете использовать группирование по первой букве, используя

group by left(query, 1)

А из серверного скрипта покажите 8 результатов из результата запроса (возможно, используя номер страницы страницы * 8 и начиная с этого индексаза каждую букву, начиная со страницы 0, то есть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...