【问题标题】:Non-Linear Database Retrieval非线性数据库检索
【发布时间】:2011-02-28 23:30:07
【问题描述】:
我正在构建一个文章系统,每篇文章都会有一个多标签与之关联(类似于本站的标签)。
表格设置如下:
Article_Table
Article_ID | Title | Author_ID | Content | Date_Posted | IP ...
Tag_Table
Tag_ID | Name ...
Tag_Intersect_Table
Tag_ID | Article_ID
是否可以在一次数据库调用中查询一篇文章及其所有相关标签?如果是这样,这是如何完成的?
【问题讨论】:
标签:
php
jquery
sql
database
oop
【解决方案1】:
您正在寻找在 SQL 中称为 JOIN 的内容:
SELECT
Article_ID, Title, TT.Name as 'Tag_Name'
FROM
Article_Table AT
INNER JOIN Tag_Intersect_Table TI
ON AT.article_id = TI.article_id
INNER JOIN Tag_Table TT
ON TI.tag_id = TT.tag_id
WHERE
article_id = @my_article_id
使用自然连接语法将两个实体表连接到同一个交集表。
请注意,在此结果集中,标签和文章的每个组合都有一行,因此每个标签的 article_id 和标题将一遍又一遍地重复。如果您只查询一篇文章并且只想获取所有标签的名称,您可以将SELECT 列表限制为仅TT.name。