我需要允許用戶使用標題中的第一個字母來瀏覽一個具有> 100萬個條目的表格。將字符串中的第一個字符與數字或非標準字符相匹配
我希望他們能夠通過A-Z中的每個字母,0-9在列表中一起瀏覽並將所有其他字符一起瀏覽。
由於它是一個大型數據庫,它將顯示在網站上,我需要它是高效的。正則表達式不使用索引,所以這會太慢。
這是可能的,還是我將不得不重新考慮設計?
在此先感謝
我需要允許用戶使用標題中的第一個字母來瀏覽一個具有> 100萬個條目的表格。將字符串中的第一個字符與數字或非標準字符相匹配
我希望他們能夠通過A-Z中的每個字母,0-9在列表中一起瀏覽並將所有其他字符一起瀏覽。
由於它是一個大型數據庫,它將顯示在網站上,我需要它是高效的。正則表達式不使用索引,所以這會太慢。
這是可能的,還是我將不得不重新考慮設計?
在此先感謝
創建代表每個字母和數字的鏈接。單擊這些鏈接將爲用戶提供從所選字符開始的數據庫結果。
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;
只要有一個在「標題」的索引,你應該能夠使用SQL像
select *
from myTable
where Title like 'A%'
(或「B%」,「C%」 ...)
對不起,我以爲我已經包括在主題中,我已經在爲A-Z做這件事。但問題是在一個查詢中取出0-9,並且在一個查詢中所有的標題不以A-Z0-9開頭。 – Simon 2011-01-21 17:07:56
Wont 10 LEFT(title,1)=「*」會很慢嗎?那麼從其他角色開始的標題呢?謝謝:) – Simon 2011-01-21 17:34:12