I have a custom dropdown field setup on sign up where users select a ‘Category’ that best suits them.
How can I find users based on what they selected within that dropdown?
I have a custom dropdown field setup on sign up where users select a ‘Category’ that best suits them.
How can I find users based on what they selected within that dropdown?
To get all values for a named field, try this, with the name of your field entered into the field_name input:
--[params]
-- string :field_name
WITH ucf_name AS(
SELECT
CONCAT('user_field_', id) AS name
FROM user_fields
WHERE name = :field_name
)
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)
To get the value of a user field for a specific user:
--[params]
-- string :field_name
-- string :username
WITH ucf_name AS(
SELECT
CONCAT('user_field_', id) AS name
FROM user_fields
WHERE name = :field_name
)
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 u.username = :username
To only get users who have entered a specific value for a field, try this, with the name of the field entered into the field_name input, and the value you are looking for entered into the field_value input:
--[params]
-- string :field_name
-- string :field_value
WITH ucf_name AS(
SELECT
CONCAT('user_field_', id) AS name
FROM user_fields
WHERE name = :field_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 = :field_value
사용자 정의 사용자 필드인 'Pro Email’을 가진 모든 사용자를 검색할 수 있는 올바른 쿼리를 찾고 있습니다. 하지만 Pro 그룹에 속하지 않는 사용자를 찾는 것이 목표입니다.
귀하의 게시물을 이 주제로 이동했습니다. 제 생각에는 이 주제에서 제가 이전에 작성한 게시물의 마지막 쿼리가 찾으시는 것에 근접하게 해줄 것입니다. 커스텀 필드가 확인(confirmation) 유형인 경우, field_value 파라미터에 'true’를 입력하십시오. 그러면 쿼리의 field_name 파라미터로 제공한 필드 이름에 대해 확인 상자를 체크한 모든 사용자가 반환됩니다.
쿼리에 추가 작업을 수행하여 이미 Pro 그룹에 속한 사용자를 제외해야 합니다.
이미 해당 그룹에 있는 사용자를 제외하고, 그룹에 속하지 않는 사용자만 반환하는 쿼리에 대한 예시가 있을까요?
저는 Discourse의 데이터 탐색기 플러그인을 많이 사용해 본 적이 없습니다.
다음은 이를 수행하는 방법 중 하나입니다. 제외 대상 그룹의 구성원으로 이루어진 excluded_users 임시 테이블을 추가합니다. 쿼리의 group_name 파라미터에는 해당 그룹의 이름을 지정해야 합니다.
--[params]
-- string :field_name
-- string :field_value
-- 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 = :field_value
AND u.id NOT IN (SELECT user_id FROM excluded_users)
데이터 탐색기 쿼리를 공유해 주셔서 감사합니다. 정말 감사드립니다.
Pro Email 사용자 사용자 정의 필드에 값이 설정되어 있는지 처리만 하면 되므로, field_value에는 무엇을 정의해야 합니까?
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)
감사합니다, 정말 잘 작동합니다!
@simon 님, 안녕하세요. 여러 개의 커스텀 필드가 있는 경우, 사용자 목록과 해당 커스텀 필드에 대한 답변만 반환하려면 이 중 어떤 쿼리를 사용해야 할까요? '어디서 저희를 알게 되셨나요?'라는 질문은 여러 선택이 가능하도록 체크박스를 제공하며, 다른 질문은 이메일, SMS, 우편 중 어떤 방식으로 연락받고 싶은지 묻고 있습니다.
감사합니다.
클레멘트
위 쿼리 중 어느 것도 정확히 원하는 결과를 제공하지 않습니다. 새로운 쿼리를 작성하지 않고 최선의 접근 방식은 제가 이전에 게시한 첫 번째 쿼리를 여러 번 실행하는 것입니다. 각 커스텀 필드에 대해 한 번씩 실행하십시오. 필드 이름을 쿼리의 field_name 입력값으로 입력하세요. 제가 언급하는 쿼리는 다음과 같습니다:
--[params]
-- string :field_name
WITH ucf_name AS(
SELECT
CONCAT('user_field_', id) AS name
FROM user_fields
WHERE name = :field_name
)
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)