Php select查询中的两级联接

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(): 这是一次使用*在选择中使用和分组依据是安全的,因

我有3个表:
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
;