我想从MySQL数据库中获取他们所连接的文章和所有标记名称。我的SQL代码:
CREATE TABLE articles (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)
CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
PRIMARY KEY (id)
)
CREATE TABLE connections (
art_id INT UNSIGNED NOT NULL,
tag_id INT UNSIGNED NOT NULL
);
我应该执行多个查询还是制作单个查询?我怎么能做到这一点?我试着玩JOIN,但似乎不能这样做。
PS。我一直在寻找,但在SO上没有任何确切的问题。
答案 0 :(得分:1)
select a.id, group_concat(t.name) as tags
from articles a
left join connections c on c.art_id = a.id
left join tag t on t.id = c.tag_id
group by a.id
此查询每篇文章返回1行,group_concat()会将所有连接标记的名称返回为comma delimited list(如果没有连接标记,则返回null)。
答案 1 :(得分:1)
你有一个良好的开端 - 但有一些事情可以在这里进行优化。
我们还假设你的文章表有一个ID和一个标题字段(只是为这个查询添加一些香料)。
简单回答您的问题:
Select a.ID "ID", a."Title" "Title", t.Name "Tag_Name"
From connections c
Left Join article a
on a.id = c.art_id
Left Join tags t
on t.id = c.tag_id
-- If you want to filter on a certain article ID
WHERE a.id = @SomeArticleParam
我真的建议一些事情来优化这些表:
答案 2 :(得分:0)
试试这个
select a.(*),t.name from articles a
inner join connection c on a.id=c.art_id
inner join tags t on c.tag_id=t.id
答案 3 :(得分:0)
SELECT articles.*,tags.* FROM articles , tags,connections
where tags.id=connections.tag_id and articles.id=connections.art_id