Si Pro Email est un champ de confirmation (case à cocher), alors définir le paramètre field_value de la requête sur true fonctionnera.
Puisque tout ce que vous souhaitez faire est de vérifier que le champ a été défini, je pense que cette version de la requête fonctionnera mieux pour vous. Elle supprime le paramètre field_value et vérifie que le champ nommé a été défini avec (ucf.value = '') IS NOT TRUE. Cela renverra false pour tous les utilisateurs qui n’ont pas défini le champ, et renverra également false pour les utilisateurs qui ont défini le champ puis supprimé la valeur qu’ils avaient saisie :
--[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)
Si vous souhaitez que la requête renvoie la valeur du champ, modifiez l’instruction SELECT finale comme suit :
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)