2016-01-20 100 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