2016-01-20 51 views
0

我有3个表:如何在链接表链接的多个表上进行文本搜索?

图片

"id" int4 NOT NULL DEFAULT nextval('images_id_seq'::regclass), 
"created_at" timestamp NOT NULL, 
"updated_at" timestamp NOT NULL, 
"thumbnail_url" varchar(128), 
"web_url" varchar(128), 
"large_url" varchar(128), 
"titlelong" varchar(255) NOT NULL, 
"titleshort" varchar(255) NOT NULL 

标签

"id" int4 NOT NULL DEFAULT nextval('tags_id_seq'::regclass), 
"tag" varchar(128) NOT NULL, 

image_tags

"tag_id" int4 NOT NULL, 
"image_id" int4 NOT NULL, 

我需要做的,看起来在图像领域和标签领域的搜索从标签,但将标签链接到图像,但image_tags表。我不是一个SQL的专家,但试图变得更好。

回答

0

在标准的SQL:

SELECT 
    * 
FROM 
    image_tags r 
    JOIN tags t ON t.id = r.tag_id 
    JOIN images i ON i.id = r.image_id 
WHERE 
    -- What ever you like to search for 

正如我们在这里所说的PostgreSQL你可能会考虑重新命名images.idimages.image_idtags.idtags.tag_id
然后查询看起来是这样的:

SELECT 
    * 
FROM 
    image_tags r 
    JOIN tags t USING (tag_id) 
    JOIN images i USING (r.image_id) 
WHERE 
    -- What ever you like to search for 

优势三:

  • 减少输入(错误机会少)
  • 保持清晰的视野(当它涉及到更大的查询)
  • tag_idimage_id不同列中没有完全相同的数据只会在结果中出现一次
+0

这有帮助,但我也需要搜索图像表 – ThinkNewDev

+0

你实际上可以,因为你会得到所有列'标签'和'图像的所有列作为该查询的结果。这是由'SELECT *'造成的。 'image_tags'会告诉哪个标签属于哪个图片。试着稍微摆弄一下。 – MyBrainHurts