表1(个)
[pid - ptitle - pcontent - ptags]
[1 - PHPCourse - Lorem - PHP,MYSQL,PDO]
表2(标签)
[tag_id, tag_name]
[1 - PHP]
[2 - MYSQL]
[3 - PDO]
将这两张表联系起来的最佳方法是什么? 我检查了3张桌子,我制作了第3张桌子
表3(posts_tags)
[pid - tag_id]
[1 - 1]
[1 - 2]
[1 - 3]
但人们说这对SELECT查询不好,即使我打算像这样使用它
SELECT * FROM tags WHERE id = $pid
但是我看到人们使用了一种叫做内连接的东西,甚至没有在代码中提到table3,而我无法理解它,那么我怎么能正确地做到这一点?
答案 0 :(得分:0)
看看下面的代码。
表1(个)
[tag_id, tag_name]
[1 - PHP]
[2 - MYSQL]
[3 - PDO]
表2(标签)
[pid - tag_id]
[1 - 1]
[1 - 2]
[1 - 3]
select * from posts
inner join posts_tags at posts.pid = posts_tags.pid
inner join tags at tags.tag_id = post_tags.tag_id;
表3(posts_tags)
{{1}}
答案 1 :(得分:0)
您的桌面设计方法看起来不错。 另外,wordpress和drupal正在使用类似的方法。 如果你想了解更多,请谷歌“wordpress分类法或drupal分类法”。 下载他们的源代码并分析数据库架构将对您有所帮助。
(不确定如何在不使用posts_tags的情况下获取数据...) 这是我的表架构和查询。
<强>帖子强>
id, title, content
1, foo, bar
2, foo2, bar2
<强>代码
id, name
1, tag1
2, tag2
3, tag3
4, tag4
<强> posts_tags 强>
pid, tid
1, 1
1, 2
1, 3
2, 1
2, 2
2, 4
<强> QUERY 强>
SELECT p.id, p.title, p.content, GROUP_CONCAT(t.name) as ptags
FROM posts p
INNER JOIN posts_tags pt ON (p.id = pt.pid)
INNER JOIN tags t ON (t.id = pt.tid)
/* WHERE p.id = 1 */
GROUP BY p.id
<强> RESULT 强>
id title content ptags
1 foo bar tag1,tag2,tag3
2 foo2 bar2 tag1,tag2,tag4
当您分隔帖子和标签表时,您可以随时添加或删除标签功能,添加或删除标签,posts_tags。