मेरे पास एक क्वेरी है जो एक विशिष्ट मेटा मान (लिंग) के अनुसार उपयोगकर्ताओं की कुल संख्या लौटाती है, केवल उन उपयोगकर्ताओं को ध्यान में रखते हुए जो अवरुद्ध नहीं हैं (user_blocked_access):

SELECT umc.meta_value AS label, COUNT(umb.user_id) AS total
FROM wp_users u
INNER JOIN
    wp_usermeta umc
    ON umc.user_id = u.ID 
    AND umc.meta_key = 'user_gender' 
    AND umc.meta_value <> ''
INNER JOIN
    wp_usermeta umb
    ON umb.user_id = u.ID 
    AND umb.meta_key = 'user_blocked_access' 
    AND CAST(umb.meta_value AS BINARY) <> '1' 
GROUP BY umc.meta_value
ORDER BY total DESC

मुझे एक विशिष्ट उपयोगकर्ता भूमिका के लिए केवल परिणाम वापस करने होंगे:

umb.meta_key = 'wp_capabilities' AND umb.meta_value LIKE '%craftsman%'

लेकिन मुझे नहीं पता कि मुझे कोड के इस हिस्से को कहां जोड़ना चाहिए।

-1
marcelo2605 3 फरवरी 2021, 14:53

1 उत्तर

सबसे बढ़िया उत्तर

आप एक अतिरिक्त JOIN जोड़ सकते हैं:

SELECT umc.meta_value AS label, COUNT(umb.user_id) AS total
FROM wp_users u INNER JOIN
    wp_usermeta umc
    ON umc.user_id = u.ID  AND
       umc.meta_key = 'user_gender' AND
       umc.meta_value <> '' INNER JOIN
    wp_usermeta umb
    ON umb.user_id = u.ID AND
       umb.meta_key = 'user_blocked_access' AND 
       CAST(umb.meta_value AS BINARY) <> '1' INNER JOIN 
    wp_usermeta umr
    ON umr.user_id = u.ID AND
       umr.meta_key = 'wp_capabilities' AND
       umr.meta_value LIKE '%craftsman%'
GROUP BY umc.meta_value
ORDER BY total DESC;

नोट: यह मानता है कि प्रति उपयोगकर्ता केवल एक wp_capabilities है। यदि गुणज हैं, तो EXISTS अधिक सुरक्षित है:

SELECT umc.meta_value AS label, COUNT(umb.user_id) AS total
FROM wp_users u INNER JOIN
    wp_usermeta umc
    ON umc.user_id = u.ID  AND
       umc.meta_key = 'user_gender' AND
       umc.meta_value <> '' INNER JOIN
    wp_usermeta umb
    ON umb.user_id = u.ID AND
       umb.meta_key = 'user_blocked_access' AND
       CAST(umb.meta_value AS BINARY) <> '1'
WHERE EXISTS (SELECT 1
              FROM wp_usermeta umr
              WHERE umr.user_id = u.ID AND
                    umr.meta_key = 'wp_capabilities' AND
                    umr.meta_value LIKE '%craftsman%'
             )
GROUP BY umc.meta_value
ORDER BY total DESC;
1
marcelo2605 3 फरवरी 2021, 15:06