-1

記事とそれらが接続されているすべてのタグ名を 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で遊んでみたのですが、どうやら出来ないようです。

PS。私は検索してきましたが、SOに関する正確な質問はありません。

4

4 に答える 4

1

素晴らしいスタートを切っていますが、ここで最適化できることがいくつかあります。

また、Article テーブルに ID と Title フィールドがあるとします (このクエリにスパイスを加えるためだけに)。

質問に簡単に答えるには:

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

これらのテーブルを最適化するために、いくつかのことをお勧めします。

  1. 接続は記事とタグを直接リンクするため、外部キー参照を接続テーブルに追加します。ここに良いリンクがあります:外部キーリンク
  2. 接続テーブルにインデックスを付けます。これにより、特定のタグや記事を参照する際のクエリが高速になります。Unique インデックスは、接続テーブルに記事/タグのペアが重複して追加されるのを防ぐのに役立ちます。開始するのに適したリンクは次のとおりです: index link
于 2012-10-29T12:18:03.543 に答える
0
 SELECT articles.*,tags.* FROM articles , tags,connections 
 where tags.id=connections.tag_id  and articles.id=connections.art_id 
于 2012-10-29T12:07:05.937 に答える