2010-06-24 1 views
1

나는 사전 순으로 정렬 된 목록을 작성 중입니다. 목록에는 다음 아이콘이 속하는 편지가 들어있는 구분선이 표시되어야합니다.목록보기의 일부 항목 뒤에 구분선을 표시하는 방법은 무엇입니까?

데이터베이스에서 이미 정렬 된 결과가 들어있는 Cursoradapter를 사용하고 있습니다. 목록 항목에 구분선을 추가하고 표시된 문자가 바뀌면 표시되도록 설정하려고합니다. 내가 새 편지를 가지고 있다는 것을 어떻게 알 수 있습니까? 커서에서 앞으로 또는 뒤로 나아가는 더 좋은 방법이 있습니까? 그리고 내가 보여주는 항목이 새로운 그룹의 끝이나 시작인지 확인하십시오.

답변

2

커서에 대한 데이터를 제공하는 SQL 쿼리에서이를 수행 할 수 있습니다.

person(name varchar) 테이블이 있다고 가정합니다. 대신 그냥 물어의

:

SELECT name FROM person ORDER BY name; 

한 캔 쿼리 : (이름, isFirst)는 결과 집합을 제공

SELECT p.name, CASE(
    SELECT COUNT(*) 
    FROM person 
    WHERE name<p.name and SUBSTR(name, 1, 1)=SUBSTR(p.name,1 , 1) 
    ) WHEN 0 THEN 1 ELSE 0 END isFirst 
FROM person p 
ORDER BY name; 

- 각 항목 isFirst가 1로 설정해야합니다 "새로운"문자로 시작 새 그룹의 시작을 나타냅니다.

편집 : 예 :

CREATE TABLE person(name varchar); 
INSERT INTO person SELECT 'Jim' UNION SELECT 'Tom' UNION SELECT 'Ben' UNION SELECT 'John' UNION SELECT 'Alice' UNION SELECT 'Chris' UNION SELECT 'Anna' UNION SELECT 'Jerry'; 
SELECT p.name, CASE(
    SELECT COUNT(*) 
    FROM person 
    WHERE name<p.name and SUBSTR(name, 1, 1)=SUBSTR(p.name,1 , 1) 
    ) WHEN 0 THEN 1 ELSE 0 END isFirst 
FROM person p 
ORDER BY name; 

을 제공합니다

Alice|1 
Anna|0 
Ben|1 
Chris|1 
Jerry|1 
Jim|0 
John|0 
Tom|1 
+0

좋은 생각하지만 샘플은 작동하지 않습니다. 하위 문자열 (이름)과 하위 문자열 (이름)은 항상 동일합니다 – Janusz

+0

작동하지 않습니까? 예제와 결과를보세요 ... – Gawcio

+0

예를 들어 주셔서 감사합니다. 이제 끝내고 사람 p를 간과했습니다. – Janusz