我有3个表:posts
,tags
和post_tags
我存储帖子标签!帖子可以有很多标签
现在我想在选择帖子自己的列时选择帖子1的所有标签名称。
帖子列为:id
,title
标签列为:id
,name
post_tags列为:id
,post_id
,tag_id
我已到达此处,但这只返回一个标记名称,而不是所有标记:(任何想法?)
select
p.*, t.name as tag_name
from
posts p
inner join posts_tags pt on p.id = pt.post_id
inner join tags t on pt.tag_id = t.id
where
p.id = 1 limit 1
答案 0 :(得分:0)
如果您想要一行上的所有标记,您可以汇总结果并使用group_concat()
:
select p.*, group_concat(t.name) as tag_name
from posts p inner join
posts_tags pt on p.id = pt.post_id inner joi
tags t on pt.tag_id = t.id
where p.id = 1
group by p.id;
这是有一次*
select
group by
与id
一起使用,因为fileprivate let defaults = UserDefaults.standard
func storeValue(_ value: AnyObject, forKey key:String) {
defaults.set(value, forKey: key)
defaults.synchronize()
NotificationCenter.default.post(name: Notification.Name(rawValue: "persistanceServiceValueChangedNotification"), object: key)
}
func getValueForKey(_ key:String, defaultValue:AnyObject? = nil) -> AnyObject? {
return defaults.object(forKey: key) as AnyObject? ?? defaultValue
}
在表格中是唯一的。这种用法甚至被ANSI标准所宽恕。
答案 1 :(得分:0)
试试这个:从posts_tags中选择id = 1的所有帖子,每个帖子都带有相应的标签 - 详细信息:
select
pt.id, // Optional
pt.post_id, // Optional
p.title,
t.name as tag_name
from
posts_tags as pt
left join posts as p on p.id = pt.post_id
left join tags as t on t.id = pt.tag_id
where
pt.post_id = 1
;