سؤال

ولدي "مجموعة خصائص" الأساسي الجدول الذي سمات مخازن عن بلدي الأولية الجدول "بطاقة". حتى عندما أريد أن أبدأ القيام ببعض البحث المتقدم للحصول على بطاقات، وأستطيع أن أفعل شيئا من هذا القبيل:

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'))

وماذا أحتاج إلى القيام به هو استخراج هذه الفكرة إلى نوع من الإجراء المخزن، بحيث مثالي I يمكن أن تمر في قائمة مجموعات الملكية / قيمة والحصول على نتائج البحث.

في البداية وهذا ما سيكون "صارم" البحث وهذا يعني أن النتائج يجب أن تتطابق جميع العناصر في الاستعلام، ولكن أود أيضا أن يكون استعلام "فضفاضة" بحيث تتطابق مع أي من النتائج في الاستعلام.

وأنا لا يمكن أن يبدو تماما للالتفاف رأسي حول هذا واحد. كان لي نسخة السابقة من هذا أن تفعل توليد بعض الاستعلام SQL ضخمة لتنفيذ مع الكثير من AND / OR بنود في ذلك، ولكن أنا على أمل أن تفعل شيئا قليلا أكثر أناقة هذا الوقت. كيف أذهب عن القيام بذلك؟

هل كانت مفيدة؟

المحلول

ويبدو لي أن لديك EAV النموذج هنا. إذا كنت تستخدم مزود خدمة 2005 وتصل فما استقاموا لكم فاستقيموا أقترح عليك استخدام نوع البيانات XML لهذا:

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

ويجعل من البحث والاشياء أسهل بكثير مع المدمج في قدرات أكس الاستعلام.

وإذا كنت لا تستطيع تغيير النموذج الخاص بك، ثم ننظر إلى هذا:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top