2

我有一个“开始”和“结束”列,我想将其用于合并另一个表中的范围。我想将范围的“描述”连接在一起。这可能吗?

下面是我的架构的样子:

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 Fiddle ( 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.

但是,我试图将第一条记录的描述值设为:

Donec tincidunt fringilla libero et vestibulum。(156) Donec auctor a velit eu tempor。(157) Etiam sed lobortis sapien。(158) 整数 ut dui ultricies arcu congue pulvinar。(159) Proin feugiat dignissim rutrum。(160) Mauris eu ultrices ligula。(161) Ut varius id enim tempor porta。(162)

4

2 回答 2

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 小提琴演示

于 2013-07-28T06:49:25.240 回答
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

怎么办?

于 2013-07-28T08:47:33.800 回答