استعلام لتصفية المستخدمين حسب "الحقول المخصصة" للتسجيل

إذا كان حقل “بريد إلكتروني محترف” (Pro Email) حقلاً للتأكيد (مربع اختيار)، فسيكون تعيين معامل field_value في الاستعلام إلى true فعالاً.

وبما أن كل ما تريد فعله هو التحقق من تعيين الحقل، فأعتقد أن هذا الإصدار من الاستعلام سيكون أكثر ملاءمة لك. فهو يزيل معامل field_value ويتحقق من تعيين الحقل المسمى باستخدام (ucf.value = '') IS NOT TRUE. سيعيد هذا القيمة false لأي مستخدمين لم يقوموا بتعيين الحقل، كما سيعيد false للمستخدمين الذين قاموا بتعيين الحقل ثم حذفوا القيمة التي وضعوها:

--[params]
-- string :field_name
-- string :group_name

WITH ucf_name AS(
SELECT
CONCAT('user_field_', id) AS name
FROM user_fields
WHERE name = :field_name
),
excluded_users AS (
SELECT
gu.user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
)

SELECT
u.id AS user_id
FROM users u
JOIN user_custom_fields ucf
ON ucf.user_id = u.id
WHERE ucf.name = (SELECT name FROM ucf_name)
AND (ucf.value = '') IS NOT TRUE
AND u.id NOT IN (SELECT user_id FROM excluded_users)

إذا كنت ترغب في أن يعيد الاستعلام قيمة الحقل، فقم بتغيير جملة SELECT النهائية إلى:

SELECT
u.id AS user_id,
ucf.value
FROM users u
JOIN user_custom_fields ucf
ON ucf.user_id = u.id
WHERE ucf.name = (SELECT name FROM ucf_name)
AND (ucf.value = '') IS NOT TRUE
AND u.id NOT IN (SELECT user_id FROM excluded_users)