Abfrage zum Filtern von Benutzern nach benutzerdefinierten Anmeldefeldern

Wenn Pro Email ein Bestätigungsfeld (Checkbox) ist, funktioniert die Einstellung des Parameters field_value der Abfrage auf true.

Da Sie nur prüfen möchten, ob das Feld gesetzt wurde, denke ich, dass diese Version der Abfrage besser für Sie geeignet ist. Sie entfernt den Parameter field_value und prüft, ob das benannte Feld mit (ucf.value = '') IS NOT TRUE gesetzt wurde. Dies gibt false für alle Benutzer zurück, die das Feld nicht gesetzt haben, und ebenfalls false für Benutzer, die das Feld gesetzt und den Wert anschließend gelöscht haben:

--[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)

Wenn Sie möchten, dass die Abfrage den Wert des Feldes zurückgibt, ändern Sie die letzte SELECT-Anweisung wie folgt:

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)