كيف يمكنني البحث في "حقيبة الملكية" الجدول في SQL؟
-
19-08-2019 - |
سؤال
ولدي "مجموعة خصائص" الأساسي الجدول الذي سمات مخازن عن بلدي الأولية الجدول "بطاقة". حتى عندما أريد أن أبدأ القيام ببعض البحث المتقدم للحصول على بطاقات، وأستطيع أن أفعل شيئا من هذا القبيل:
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
ويجعل من البحث والاشياء أسهل بكثير مع المدمج في قدرات أكس الاستعلام.
وإذا كنت لا تستطيع تغيير النموذج الخاص بك، ثم ننظر إلى هذا: