2013-07-28 7 views
2

У меня есть столбец «start» и «end», который я бы хотел использовать для слияния диапазона из другой таблицы. Я хотел бы объединить «описания» вместе диапазона. Это возможно?Объединить диапазон в один столбец для 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 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) Integer ut dui утюги 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

Но это не соответствует диапазону tho. Это конкатенирование чего-либо с идентификатором главы: http://sqlfiddle.com/#!2/499186/1 – TruMan1

+0

@ TruMan1 вы можете объяснить диапазон немного больше –

+0

Таблица «verses_range» имеет столбцы «start» и «end». Я только хочу взять стихи из таблицы «стихи», которая находится между этим диапазоном. Например, только стихи 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

Теперь что?