我有一个与标签相匹配的网络应用程序,需要创建一种动态细化标签搜索结果的方法。然而,我找不到一个干净的方式来进行SQL查询,这就是我需要你的帮助的地方。
我的想法是,如果我搜索标签“clean”和“dog”,我将得到同时具有“clean”和“dog”标签的图像结果。如果我还包括标签“little”,我的结果必须缩小到具有这三个标签关联的图像。
因此,由于存在N对N的关系,什么是正确的处理方式呢?
我的自然方法是生成类似于这样的代码,但我肯定不喜欢它的发展方向:
当然,这并不是很好。有什么想法吗?
谢谢!
我的想法是,如果我搜索标签“clean”和“dog”,我将得到同时具有“clean”和“dog”标签的图像结果。如果我还包括标签“little”,我的结果必须缩小到具有这三个标签关联的图像。
因此,由于存在N对N的关系,什么是正确的处理方式呢?
我的自然方法是生成类似于这样的代码,但我肯定不喜欢它的发展方向:
SELECT images.*
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag = @tag1
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag2
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag3
AND EXISTS (...)
...
)
)
当然,这并不是很好。有什么想法吗?
谢谢!
GROUP BY
应该避免为每个标签返回一行。我编辑了问题以展示它如何处理动态数量的标签。 - Peter Lang