2013-07-28 2 views
2

다른 테이블의 범위를 병합하는 데 사용하려는 "시작"및 "끝"열이 있습니다. 범위의 "설명"을 연결하고 싶습니다. 이것이 가능한가? MySQL의 단일 열에 범위를 병합 하시겠습니까?

CREATE TABLE verses 
(
    `id` int auto_increment primary key, 
    `chapter` int(11) NOT NULL, 
    `verse` int(11) NOT NULL, 
    `description` text 
); 

CREATE TABLE verses_range 
(
    `id` int auto_increment primary key, 
    `chapter` int(11) NOT NULL, 
    `start` int(11) NOT NULL, 
    `end` int(11) 
); 

지금까지이 내가 가진 것입니다하지만 난 범위의 설명 열을 병합하는 방법을 알아낼 수 없습니다 : 아래

처럼 내 스키마 모습입니다. 내가 처음에 대해 설명 값을 얻기 위해 노력하고 있어요,하지만

ID CHAPTER START END DESCRIPTION 
1 2 156 162 Donec tincidunt fringilla libero et vestibulum. 
2 3 53 (null) Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

: 그것은 단지 첫 번째 레코드에 대한 설명 제공 :

SELECT verses_range.*, verses.description 
FROM verses_range 
INNER JOIN verses 
    ON verses_range.start = verses.verse 
    AND verses_range.chapter = verses.chapter 

내가 SQL 바이올린 (http://sqlfiddle.com/#!2/0578e/1)이이를이를 반환 다음과 같이 기록하십시오 :

Donec tincidunt fringilla libero et vestibulum. (156) Donec auctor a velit eu tempor. (157) 기타 보조제. (158) 정수기 ultricies arcu congue pulvinar. (159) 프로방스 비상 계획안. (160) Mauris eu ultrates ligula. (161) 유엔 버몬트 주 포트. (162)

답변

3
당신은 다음과 같이 시도 할 수 있습니다

...

SELECT verses_range.*, Group_Concat(verses.description) 
FROM verses_range 
INNER JOIN verses on 
    verses_range.chapter = verses.chapter 
where start<=verse and verse<=if(isnull(end),start,end) 
group by id,chapter,start,end 

SQL Fiddle Demo

+0

그러나 이것은 범위를 준수하지 않습니다. 그것은 장 ID로 무엇이든 연결하고 있습니다 : http://sqlfiddle.com/#!2/499186/1 – TruMan1

+0

@ TruMan1 너는 조금 더 설명 할 수 있겠 니? –

+0

"verses_range"테이블은 "시작"과 "끝"열을 가지고 있습니다. 나는 그 범위 사이에 속하는 "구절"표에서 오직 구절을 움켜 잡고 싶습니다. 예를 들어, 오직 156-162 절입니다. – TruMan1

0

그래서, 우리는 ... 이런 식으로 뭔가를 얻을 수

SELECT * 
    FROM verses_range r 
    JOIN verses v 
    ON v.verse BETWEEN r.start AND r.END; 

| ID | CHAPTER | START | END | VERSE |          DESCRIPTION | 
---------------------------------------------------------------------------------------- 
| 1 |  2 | 156 | 162 | 156 | Donec tincidunt fringilla libero et vestibulum. | 
| 1 |  2 | 156 | 162 | 157 |     Donec auctor a velit eu tempor. | 
| 1 |  2 | 156 | 162 | 158 |      Etiam sed lobortis sapien. | 
| 1 |  2 | 156 | 162 | 159 | Integer ut dui ultricies arcu congue pulvinar. | 
| 1 |  2 | 156 | 162 | 160 |     Proin feugiat dignissim rutrum. | 
| 1 |  2 | 156 | 162 | 161 |      Mauris eu ultrices ligula. | 
| 1 |  2 | 156 | 162 | 162 |     Ut varius id enim tempor porta. | 

http://sqlfiddle.com/#!2/0578e/1

이제 무엇?