Совокупные результаты объединенной таблицы в SQL SELECT на MySQL 5 - PullRequest
1 голос
/ 13 июня 2011

У меня есть следующая схема, и я хотел бы сделать запрос, который возвращает одну строку для каждой записи в таблице articles, с соответствующим столбцом content из таблицы content и столбцом с каждым изчто статьи тэги, такие как вы могли бы получить с помощью concat.

Запрос должен ВЫБРАТЬ только строки, которые соответствуют определенному тегу.Поэтому, если был предоставлен тег atdi, набор результатов будет выглядеть примерно так:

id    content                                                tags
1     on my way nails broke and fell                         song,atdi,invalid
3     im all alone so far up here and my oxygen is all gone  song,atdi,hourglass
4     you know your insides true better than i do            song,atdi,starslight

Я пробовал несколько разных способов с подзапросами, но продолжаю получать ошибки - это довольно неприятно.

Вот схема:

CREATE TABLE articles (
id int not null default 0,
published datetime,
author int not null default 0,
primary key (id)
);

INSERT INTO articles
(id, published, author)
VALUES
(1, CURRENT_TIMESTAMP, 1),
(2, CURRENT_TIMESTAMP, 1),
(3, CURRENT_TIMESTAMP, 1),
(4, CURRENT_TIMESTAMP, 1);

CREATE TABLE content (
id int not null default 0,
content varchar(250) not null default '',
primary key (id)
);

INSERT INTO content
(id,content)
VALUES
(1,'on my way nails broke and fell'),
(2,'exo skeleton junction at the railroad delayed'),
(3,'im all alone so far up here and my oxygen is all gone'),
(4,'you know your insides true better than i do');

CREATE TABLE tags (
id int not null default 0,
tag varchar(100) not null default '',
primary key (id,tag)
);

INSERT INTO tags
(id,tag)
VALUES
(1,"song"),
(2,"song"),
(3,"song"),
(4,"song"),
(1,"atdi"),
(2,"mars"),
(3,"atdi"),
(4,"atdi"),
(1,"invalid"),
(2,"roulette"),
(3,"hourglass"),
(4,"starslight");

1 Ответ

1 голос
/ 13 июня 2011

Попробуйте что-то вроде этого

select a.id, a.content, b.tags_1 
from content as a  inner join (
    select id, GROUP_CONCAT(tag SEPARATOR ',') as tags_1 FROM tags group by id
) as b on a.id = b.id 
INNER JOIN tags AS c ON a.id = c.id
WHERE c.tag = 'atdi'

Используя метод GROUP_CONCAT()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...