Php 从具有关系的表中检索post标记

Php 从具有关系的表中检索post标记,php,mysql,sql,database-schema,Php,Mysql,Sql,Database Schema,我正在为我的作业写一些博客软件,我有一个posts表、tags表和post\u tagspost_标签用于删除多对多关系(一篇文章可能有多个标签,一个标签可能属于多篇文章)。以下是这些表的字段: 职位 标签 邮政标签 | t_id | p_id | 希望您能看到我在这里所做的,使用post_tags表将标签链接到帖子。现在,我想根据posts表的clean_title字段,从tags表中检索name和slug。基本上,如果我给出clean_名称,我需要与该帖子相关的所有标签。我知道我必须使用

我正在为我的作业写一些博客软件,我有一个
posts
表、
tags
表和
post\u tags
post_标签
用于删除多对多关系(一篇文章可能有多个标签,一个标签可能属于多篇文章)。以下是这些表的字段:

职位

标签

邮政标签

 | t_id | p_id |
希望您能看到我在这里所做的,使用
post_tags
表将标签链接到帖子。现在,我想根据
posts
表的
clean_title
字段,从
tags
表中检索
name
slug
。基本上,如果我给出
clean_名称
,我需要与该帖子相关的所有标签。我知道我必须使用SQL连接,但我不知道如何使用它们

这就是我尝试过的:

$query = $this->db->query("SELECT name, slug
                           FROM tags
                           LEFT JOIN post_tags ON posts.p_id=post_tags.p_id
                           LEFT JOIN tags ON post_tags.t_id=tags.t_id
                           WHERE posts.clean_title = ?
                           ORDER BY name DESC");
但是我得到了这个错误:
不是唯一的表/别名:'tags'


谢谢

您的第一个
JOIN
references
posts
,但您不会在其他任何地方使用该表。我猜你的意思是:

     SELECT name, slug
     /* First table should have been `posts`? */
     FROM posts
     LEFT JOIN post_tags ON posts.p_id=post_tags.p_id
     LEFT JOIN tags ON post_tags.t_id=tags.t_id
     WHERE posts.clean_title = ?
     ORDER BY name DESC

您将加入
标记
两次。将第二个
连接更改为连接到posts表:

SELECT tags.name, tags.slug
FROM tags
LEFT JOIN post_tags ON post_tags.t_id = tags.t_id
LEFT JOIN posts ON posts.p_id = post_tags.p_id
WHERE posts.clean_title = ?
您可以使用以下别名缩短查询:

SELECT t.name, t.slug
FROM tags t
LEFT JOIN post_tags pt ON pt.t_id = t.t_id
LEFT JOIN posts p ON p.p_id = pt.p_id
WHERE p.clean_title = ?

伍普西。我知道这很简单哈哈:P谢谢你,伙计。
SELECT tags.name, tags.slug
FROM tags
LEFT JOIN post_tags ON post_tags.t_id = tags.t_id
LEFT JOIN posts ON posts.p_id = post_tags.p_id
WHERE posts.clean_title = ?
SELECT t.name, t.slug
FROM tags t
LEFT JOIN post_tags pt ON pt.t_id = t.t_id
LEFT JOIN posts p ON p.p_id = pt.p_id
WHERE p.clean_title = ?