2011-07-19 68 views
0

我有一個表的列,讓我們稱之爲「查詢」,這是一個varchar。如何按照此順序從Mysql中檢索結果?

我想檢索值到分頁列表中,每個頁面將包含208個結果,每個字母在字母表中包含8個結果。

所以在第1頁上,前8個結果將以「a」開頭,接下來的8個以「b」開頭,依此類推直到「z」(如果沒有任何結果,那麼它只是繼續到下一個字母。

在第2頁的結果會顯示下一個8個結果開始以「A」,下爲「b」,依此類推。

基本上而不是通過查詢排序ASC,這將導致第一頁包含以「a」開頭的所有單詞,我希望每個頁面包含以字母表的每個字母開頭的單詞

如果您收費l我沒有正確解釋自己(我確實!),那麼請隨時提問。我頭腦中有這個想法,但把它翻譯成文字並不容易!

回答

1

一個天真的啓動方法可能是:

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

你可以使用group使用

group by left(query, 1) 

,並從服務器端腳本,顯示從查詢結果8個結果第一個字母(比如用頁頁碼* 8,並從該指數開始每個字母,從0頁開始,也就是)

0

我認爲這是不可能在一個語句中做的(或者,可能是可行的,但執行速度太慢)。可能是你必須看看MySQL準備的語句或改變頁面的行爲。

0

我永遠不會使用這個查詢的大型數據集,但只是爲了好玩個人,我發現這個解決方案:

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 
相關問題