Question

J'ai un "sac de propriétés de base" de base; table qui stocke les attributs relatifs à ma table principale " Card. " Alors, quand je veux commencer à faire des recherches avancées pour les cartes, je peux faire quelque chose comme ça:

SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
  SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))

Ce que je dois faire, c'est extraire cette idée dans une sorte de procédure stockée, afin de pouvoir idéalement passer une liste de combinaisons propriété / valeur et obtenir les résultats de la recherche.

Au départ, il s'agira d'un "strict". search signifie que les résultats doivent correspondre à tous les éléments de la requête, mais j'aimerais aussi avoir un "lâche". requête afin qu’elle corresponde à l’un des résultats de la requête.

Je n'arrive pas à comprendre ce que je pense. Ma version précédente de cela devait générer une requête SQL massive à exécuter avec beaucoup de clauses AND / OR, mais j'espère faire quelque chose d'un peu plus élégant cette fois-ci. Comment puis-je faire cela?

Était-ce utile?

La solution

il me semble que vous avez ici un modèle EAV . Si vous utilisez SQL Server 2005 et plus, je vous suggère d'utiliser le type de données XML pour cela:

http://weblogs.sqlteam.com/mladenp /archive/2006/10/14/14032.aspx

facilite grandement les recherches et les recherches grâce aux fonctionnalités d'interrogation XML intégrées.

si vous ne pouvez pas changer de modèle, regardez ceci:

http://weblogs.sqlteam.com/davidm/articles/12117.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top