我有三张桌子相关。
图片: id |文件名| filesize | ...
节点: image_id | TAG_ID
标签: id |名称
我正在使用此查询来搜索包含x标签的图片
SELECT images.* FROM images
INNER JOIN nodes ON images.id = nodes.image_id
WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2"))
GROUP BY images.id HAVING COUNT(*)= 2
问题是我需要检索检索到的图像包含的所有标签,我需要在同一个查询中。
这是搜索检索图像所包含的所有标签的实际查询:
SELECT tag FROM nodes
JOIN tags ON nodes.tag_id = tags.id
WHERE image_id = images.id and nodes.private = images.private
ORDER BY tag
如何将这两个混合只有一个查询?
我需要结果中的所有图像表加上图像的标签。喜欢: ID 文件名 文件大小 标签
也许如果可能是concat标签。
答案 0 :(得分:1)
或许这样的事情?
SELECT i.id, t.name
FROM images i
INNER JOIN nodes n ON n.image_id = i.id
INNER JOIN tags t ON t.id = n.tag_id
WHERE i.id IN
(
SELECT nodes.image_id
FROM nodes
INNER JOIN tags ON tags.id = nodes.tag_id
WHERE tags.name IN ('tag1', 'tag2')
)
答案 1 :(得分:0)
这个?
SELECT tag FROM nodes
JOIN tags ON nodes.tag_id = tags.id
WHERE image_id = images.id
AND nodes.private = images.private
AND image_id in (
SELECT images.id FROM images
INNER JOIN nodes ON images.id = nodes.image_id
WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2"))
GROUP BY images.id HAVING COUNT(*)= 2)
ORDER BY tag