Вот общие настройки.
У меня есть таблицы Cards
, Attributes
и таблица соединений между ними.(Давайте назовем его Tags
. Он содержит CardID
и AttributeID
.) Таблица Attributes
в основном представляет собой просто описания, такие как HasPower
, IsPoisonous
, ImmuneToWater
и т. Д.
Как мне поступить с запросом для всех карт, которые IsPoisonous
и IsElectric
?Предположим, у меня уже есть идентификаторы (13 и 45), поэтому технически таблица Attributes
не обязательно должна быть частью этого SQL.Я придумал что-то подобное, но я даже не уверен, что это оптимально.
SELECT *, (COUNT * FROM Tags t WHERE t.CardID = c.CardID AND t.AttributeID IN (13, 45)) AS TagCount
FROM Cards c
WHERE TagCount = 2
Надеюсь, мой вопрос имеет смысл.По сути, представьте, что вы смотрите на веб-интерфейс;Вы просматриваете пул из ~ 5000 карт и хотите отфильтровать результаты.Итак, вы начинаете ставить флажки: «Ядовитый», «Электрический», «Невосприимчивый к воде» и т. Д. Результаты затем фильтруются на основе этих атрибутов.
Мысли?