Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从数据库中获取文章以及连接标签的最佳方法_Mysql_Sql - Fatal编程技术网

Mysql 从数据库中获取文章以及连接标签的最佳方法

Mysql 从数据库中获取文章以及连接标签的最佳方法,mysql,sql,Mysql,Sql,我想从MySQL数据库中获取文章和它们连接到的所有标记名。我的SQL代码: CREATE TABLE articles ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) CREATE TABLE tags ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(25) NOT NULL, PRIMARY KEY (id) )

我想从MySQL数据库中获取文章和它们连接到的所有标记名。我的SQL代码:

CREATE TABLE articles (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
)

CREATE TABLE tags (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(25) NOT NULL,
    PRIMARY KEY (id)
)

CREATE TABLE connections (
    art_id INT UNSIGNED NOT NULL,
    tag_id INT UNSIGNED NOT NULL
);
我应该执行多个查询还是进行单个大查询?我怎样才能做到?我试着和JOIN一起玩,但似乎不能那样做

另外,我一直在搜索,但没有确切的问题。

试试这个

  select a.(*),t.name from articles a
  inner join connection c on a.id=c.art_id
  inner join tags t on c.tag_id=t.id

此查询将在每篇文章中返回1行,并将所有已连接标记的名称返回为a(如果没有已连接的标记,则返回null)。

您已经有了一个很好的开始,但这里有一些事情可以优化

我们还假设您的文章表有一个ID和一个标题字段(只是为了给这个查询添加一些香料)

简单回答您的问题:

Select a.ID "ID", a."Title" "Title", t.Name "Tag_Name"
From connections c
     Left Join article a 
     on a.id = c.art_id
     Left Join tags t 
     on t.id = c.tag_id
-- If you want to filter on a certain article ID 
WHERE a.id = @SomeArticleParam
我真的建议优化这些表的几件事:

  • 因为连接直接链接文章和标记,所以我会将外键引用添加到连接表中。这里有一个很好的链接:
  • 索引您的连接表-这将允许在引用特定标记或文章时进行更快的查询。唯一索引将有助于防止在connections表中添加重复的项目/标记对。这里有一个很好的链接可以帮助您开始:
  •  SELECT articles.*,tags.* FROM articles , tags,connections 
     where tags.id=connections.tag_id  and articles.id=connections.art_id 
    
    Select a.ID "ID", a."Title" "Title", t.Name "Tag_Name"
    From connections c
         Left Join article a 
         on a.id = c.art_id
         Left Join tags t 
         on t.id = c.tag_id
    -- If you want to filter on a certain article ID 
    WHERE a.id = @SomeArticleParam