2013-07-28 37 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) 
); 

到目前爲止,這是我,但我無法弄清楚如何合併範圍的說明列。它只是給出了第一個記錄的說明:

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)有這並返回此:

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. 

不過,我想獲得描述值第一記錄爲:

完成時間fringilla libero et vestibulum。 (156)Donec auctor a velit eu tempor。 (157)Etiam sed lobortis sapien。 (158)ulcuy arcu congue pulvinar。 (159)Proin feugiat dignissim rutrum。 (160)Mauris eu ultrices ligula。 (161)Ut varius id enim tempor porta。 (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

現在呢?