Как добавить дополнительный выбор в этом запросе? - PullRequest
2 голосов
/ 20 мая 2010

У меня есть три связанные таблицы.

изображения: id | имя файла | размер файла | ...

узлы: 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

Как я могу смешать эти два, чтобы иметь только один запрос?

Мне нужны все таблицы изображений в результатах плюс теги изображения. Подобно: Я бы имя файла размер файла теги

Возможно, если возможны конкататные теги.

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Что-то вроде этого возможно?

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')
)
0 голосов
/ 20 мая 2010

А это?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...