यहां बताया गया है कि आप यह कैसे कर सकते हैं:
SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
FROM meta m JOIN item_meta im
ON im.field_id = m.id
GROUP BY meta_name, meta_value
आउटपुट:
| META_NAME | META_VALUE | COUNT | |----------------|------------|-------| | Car Type | Coupe | 2 | | Car Type | Sedan | 1 | | Color | Black | 1 | | Color | Red | 1 | | Color | White | 1 | | Interior Color | Black | 2 | | Interior Color | Grey | 1 | | Make | BMW | 2 | | Make | Honda | 1 | | Model | 2Series | 1 | | Model | 3Series | 1 | | Model | Civic | 1 |
यह रहा SQLFiddle डेमो
अद्यतन करें:
फ़िल्टर किया गया:
SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
FROM meta m JOIN item_meta im
ON im.field_id = m.id
WHERE item_id IN
(
SELECT i.id
FROM item_meta im JOIN items i
ON im.item_id = i.id JOIN meta m
ON im.field_id = m.id
GROUP BY i.id
HAVING MAX(meta_name = 'Make' AND meta_value = 'BMW') = 1
AND MAX(meta_name = 'Car Type' AND meta_value = 'Coupe') = 1
)
GROUP BY meta_name, meta_value;
आउटपुट:
| META_NAME | META_VALUE | COUNT | |----------------|------------|-------| | Car Type | Coupe | 2 | | Color | Black | 1 | | Color | White | 1 | | Interior Color | Black | 1 | | Interior Color | Grey | 1 | | Make | BMW | 2 | | Model | 2Series | 1 | | Model | 3Series | 1 |
यह रहा SQLFiddle डेमो
अद्यतन2:
यह आसान है। स्वाभाविक रूप से AND
. का उपयोग करने के बजाय में HAVING
क्लॉज (एक कार एक ही समय में काली और लाल नहीं हो सकती) आपको OR
. का उपयोग करना होगा ऐसा ही
HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') = 1
OR MAX(meta_name = 'Color' AND meta_value = 'Red') = 1
या यहाँ समान आशय व्यक्त करने का दूसरा तरीका है
HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') +
MAX(meta_name = 'Color' AND meta_value = 'Red') > 0
यह रहा SQLFiddle डेमो