2011-01-21 4 views
0

제목의 첫 글자를 기준으로 사용자가 100 만 개가 넘는 항목으로 표를 탐색 할 수있게해야합니다.문자열의 첫 번째 문자와 숫자 또는 비표준 문자의 일치

나는 A-Z의 모든 문자, 0-9의 목록과 함께 모든 다른 문자를 함께 찾아 볼 수 있기를 바랍니다.

큰 데이터베이스이고 웹 사이트에 표시되기 때문에 효율적이어야합니다. 정규 표현식은 색인을 사용하지 않으므로 너무 느립니다.

이것이 가능합니까 아니면 디자인을 다시 생각해야합니까? 사전에

감사로 오랫동안 "제목"에 대한 인덱스, 당신이

 
select * 
from myTable 
where Title like 'A%' 
같은 SQL을 사용할 수 있어야 거기로

답변

0

모든 문자와 숫자를 나타내는 링크를 만듭니다. 이 링크를 클릭하면 선택한 문자로 시작하는 데이터베이스의 결과가 사용자에게 제공됩니다.

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

이러한 결과 페이지를 적절한 청크로 페이지 매김하십시오. MySQL은 당신이 원하는 문자 그룹에서 처음 100 개 레코드를 선택합니다 LIMIT

이 명령을 사용하여이 작업을 수행하게됩니다 :

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

왼쪽 10 개 (제목, 1) = "*"꽤 느립니다? 다른 캐릭터로 시작되는 제목은 무엇입니까? 감사합니다 :) – Simon

+0

당신은 특정 아닌 숫자가 아닌 문자를 선택하는 것을 의미합니까? 제한된 수의 문자가 있다는 것을 알고 있다면, 여전히 여러 개의 'OR'문을 사용할 수 있습니다. 그렇지 않으면 사용자가 그러한 문자로 시작하는 결과를 매우 자주 탐색하지 않을 경우'REGEXP '를 사용하는 것이 좋습니다. 쿼리 속도를 테스트해야합니다. – JYelton

+0

그것에 대해 생각하면 OR 문이 실제로 작동 할 수 있습니다. 고마워요, 고마워요. – Simon

1

(또는 'B의 %', 'C의 %는'...)

+0

죄송합니다. 저는 이미 A-Z에 대해 주제가 포함되어 있다고 생각했습니다. 그러나 문제는 하나의 쿼리에서 0-9을 얻고 하나의 쿼리에서 A-Z0-9로 시작하지 않는 모든 제목을 얻는 것입니다. – Simon

관련 문제