Я сталкиваюсь с моими собственными ограничениями навыков работы с MySQL, поэтому я надеюсь, что некоторые гуру SQL могут помочь с этим.Ситуация выглядит следующим образом:
У меня есть изображения, которые могут быть помечены.Как и следовало ожидать, он хранится в трех таблицах:
- Изображение
- Tag
- Tag_map (отображает изображения в теги)
У меня есть запрос SQL, который вычисляет связанные теги на основе идентификатора тега.Запрос в основном проверяет, какие другие теги использовались для изображений для изображений, использующих этот тег.Пример:
Изображение1, помеченное как «Медведь»
Изображение2, помеченное как «Медведь» и «Канада»
Если я брошу «Медведь» (или его идентификатор тега)) при запросе он вернет "Канада".Это отлично работает.Вот запрос:
SELECT tag.name, tag.id, COUNT(tag_map.id) as cnt
FROM tag_map,tag
WHERE tag_map.tag_id = tag.id AND tag.id != '185' AND tag_map.image_id IN
(SELECT tag_map.image_id FROM tag_map INNER JOIN tag ON tag_map.tag_id = tag.id WHERE tag.id = '185')
GROUP BY tag_map.id LIMIT 0,100
Часть, с которой я застрял - это количество.Для каждого возвращенного связанного тега я хочу знать, сколько изображений в этом теге.В настоящее время он всегда возвращает 1, даже если есть, например, 3. Я попытался сосчитать разные столбцы, которые все приводят к одному и тому же результату, поэтому я думаю, что в моем мышлении есть изъян.