サインアップのカスタムフィールドでユーザーをフィルタリングするクエリ

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)