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
referencesposts
,但您不会在其他任何地方使用该表。我猜你的意思是:
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 = ?