2011-01-21 48 views
0

我需要允許用戶使用標題中的第一個字母來瀏覽一個具有> 100萬個條目的表格。將字符串中的第一個字符與數字或非標準字符相匹配

我希望他們能夠通過A-Z中的每個字母,0-9在列表中一起瀏覽並將所有其他字符一起瀏覽。

由於它是一個大型數據庫,它將顯示在網站上,我需要它是高效的。正則表達式不使用索引,所以這會太慢。

這是可能的,還是我將不得不重新考慮設計?

在此先感謝

回答

0

創建代表每個字母和數字的鏈接。單擊這些鏈接將爲用戶提供從所選字符開始的數據庫結果。

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC; 

考慮將這些結果頁分頁到合適的塊中。 MySQL將讓你這樣做有LIMIT

此命令將選擇所需要的字符組中的第100條記錄:

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 0, 100; 

此命令將選擇所需要的字符組的100個記錄:

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 100, 100; 

根據您的意見,如果您想使用正則表達式組合0-9 而不使用,您需要合併幾個OR語句:

SELECT title FROM table 
WHERE (
    LEFT(title,1) = '0' 
    OR LEFT(title,1) = '1' 
    ... 
    ) 
ORDER BY title ASC; 
+0

Wont 10 LEFT(title,1)=「*」會很慢嗎?那麼從其他角色開始的標題呢?謝謝:) – Simon 2011-01-21 17:34:12

1

只要有一個在「標題」的索引,你應該能夠使用SQL像

 
select * 
from myTable 
where Title like 'A%' 
(或「B%」,「C%」 ...)

+0

對不起,我以爲我已經包括在主題中,我已經在爲A-Z做這件事。但問題是在一個查詢中取出0-9,並且在一個查詢中所有的標題不以A-Z0-9開頭。 – Simon 2011-01-21 17:07:56

相關問題