Query to filter users by sign-up 'custom fields'

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)