У меня есть база данных MySQL с различными таблицами, записи которых могут быть помечены, поэтому у меня есть таблица tags
и таблица tag_associations
, которая связывает теги с другими таблицами «taggable» через несколько внешних ключей, а также к "владеющим" пользователь - мои полей что-то вроде следующего:Подсчет записей таблицы с несколькими внешними ключами (MySQL)
- tag_association_id (первичный ключ)
- user_id (тег ассоциации создателя)
- tag_id (связанный тег)
- artist_id (с тегом a rtist может быть пустым)
- album_id (помечено альбом может быть пустым)
- track_id (помеченный трек может быть пустым)
Я в принципе хочу, чтобы сосчитать все элементы, которые были помечены определенный тег - так что-то по результатам этого запроса:
SELECT
COUNT(ta.tag_association_id) AS how_many
FROM
tag_associations AS ta
LEFT JOIN users AS u ON ta.user_id = u.user_id
WHERE
ta.tag_id = '480'
AND u.user_status = 'active'
Но проблема с этим запросом заключается в тех случаях, когда тот же тег был применен к тому же пункту несколько пользователей, поэтому если 2 разных пользователям помечать художник «Bobby Jones Band» как «рад», он учитывает обе ассоциации тегов где я просто хочу пересчитать его один раз. Я попробовал, добавив это к вышесказанному:
GROUP BY ta.artist_id, ta.album_id, ta.track_id
... который получил меня близко, но не дали точных результатов мне нужно - он дал мне несколько результатов строк различных подсчетов. Есть ли какая-нибудь магия, которую я могу использовать в таком случае, и сохранить ее в одном запросе? Оставаясь как можно эффективнее, конечно :) Спасибо!
Благодарим за отзыв Peter! Когда я запускаю это, я получаю сообщение об ошибке: «Каждая производная таблица должна иметь свой собственный псевдоним». Мне кажется, что результаты подзапроса используются в FROM, и поэтому, поскольку запрашиваемая таблица во внешнем запросе - это правильно? В этом случае имеет смысл, что результаты не появятся, хотя ... –
Извините. Я добавил псевдоним ('x'), повторите попытку. –
Ах, вот так, спасибо! –