Php select查询中的两级联接
我有3个表:Php select查询中的两级联接,php,mysql,sql,Php,Mysql,Sql,我有3个表:posts、tags和post\u tags 在post_标签中,我存储post标签!一个帖子可以有很多标签 现在我想在选择post自己的列时选择post 1的所有标记名 帖子栏包括:id,title 标记列为:id,name post_标记列包括:id,post_id,tag_id 我已经到达这里,但这只返回一个标签名,而不是所有标签:(有想法吗?) 如果要将所有标记放在一行上,可以聚合结果并使用group\u concat(): 这是一次使用*在选择中使用和分组依据是安全的,因
posts
、tags
和post\u tags
在post_标签中,我存储post标签!一个帖子可以有很多标签
现在我想在选择post自己的列时选择post 1的所有标记名
帖子栏包括:id
,title
标记列为:
id
,name
post_标记列包括:
id
,post_id
,tag_id
我已经到达这里,但这只返回一个标签名,而不是所有标签:(有想法吗?)
如果要将所有标记放在一行上,可以聚合结果并使用
group\u concat()
:
这是一次使用
*
在选择中使用和分组依据是安全的,因为id
在表中是唯一的。ANSI标准甚至允许这种用法。试试这个:从posts\u标签中选择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
;
看起来不错。它有多个标签吗?limit
以前不存在。呃,去掉限制。没关系。只需在PHP中解析结果即可。例如,请参阅-但请注意,我不是一个PHP程序员。是的,它似乎是相同的(我不再练习内部连接
)。但是(如果我弄错了,请纠正我)您使用限制1
只返回了一条记录。我的sql语句返回id为1的一篇文章的所有标记。
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
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
;