我有包含圖片和標籤(稱爲tbl_images
)的表MySQL的標籤搜索
image_file image_tags
---------- ----------------------------
test.png tag1 another_tag tag2
hi.jpg tag9 tag1 another_tag qwerty
我怎麼會做這麼說:
- 搜索「另一個」沒有返回
- 搜索'tag1'返回test.png行
- 搜索'tag1 another_tag'返回test.png行
- 'qwerty tag2'搜索沒有任何結果
?
正如在,能夠搜索使用完整標籤名稱,並同時搜索多個標籤,如果他們都出現在同一行中相同的image_tags字段。 注: -
- 我只有一個字段內搜索
- 它被用PHP搜索輸入(在
$_GET['search_terms']
檢索) - 我不能這樣做,因爲
LIKE '%tag9%
可能tag9中出現較大的做標籤,如Atag98
,正如我所說我只會喜歡確切標籤匹配。 - 我不能做
LIKE ' tag9 '
(前後注意空格,),因爲tag9可能出現在image_tags字段的開頭(那裏沒有空間,所以就沒有比賽) - 我不能做
LIKE 'tag9 another_tag'
,因爲我不知道another_tag是在tag9之後出現的,同樣因爲同樣的原因我不能做LIKE 'tag9%another_tag'
;也tag9可能是較大的標記的一部分(如前所述)。
此外,是全文搜索適合這?如果是這樣,你能舉個例子嗎?
一個棘手的問題(無論如何;)任何幫助將不勝感激。
你是在這張桌子上設計的嗎?理想情況下,您可以將圖像標記與圖像ID一起放入聯結表中,然後執行聯合以將其拉出。通過這種方式,MySQL不必使用強大的LIKE解析通過單獨的行 - http://stackoverflow.com/questions/5812680/many-to-many-relationship – citizenen 2012-04-10 22:28:12
它似乎不適用於我。我將如何使用查詢來查找結果?我嘗試過:'SELECT * FROM images JOIN tags on tags.image_id = images.id WHERE tag ='hello''它返回帶有hello標籤的圖像,但是當我有多個標籤時這不起作用。 'WHERE tag ='hello'OR tag ='flowers''如果圖片在標籤表中的id旁邊有'hello'和'flowers'標籤,但是'WHERE tag ='hello'OR tag ='tag_doesnt_exist''會返回包含圖片的行,即使圖片沒有'tag_dosent_exist'標籤。 – q3d 2012-04-10 22:43:04
如果你想要圖像有兩個標籤,使用'AND':'WHERE tag ='hello'AND tag ='tag_doesnt_exist'' – bfavaretto 2012-04-10 22:55:30