Interrogazione di user_custom_fields

Il nostro dipartimento marketing richiede alcuni dati. Posso interrogare Discourse per ottenerli. Tuttavia, sto riscontrando alcune difficoltà con user_custom_fields: abbiamo diversi campi personalizzati e ciascuno sembra corrispondere a una riga nella tabella per ogni utente. Potrei quindi avere 6-7 righe per utente. Sto lavorando a una join, ma finisco per ottenere molte righe per ogni record, quindi devo capire come effettuare la query correttamente.

Ecco quanto ho finora:

SELECT
    u.id,
    u.username_lower AS "username",
    u.created_at,
    u.last_seen_at,
    u.ip_address,
    ue.email,
    (SELECT COUNT(*)
        FROM   user_badges ub
        WHERE ub.user_id = u.id
        ) AS badge_count
FROM users u
LEFT OUTER JOIN user_emails ue on u.id = ue.user_id
LEFT OUTER JOIN user_custom_fields ucf on u.id = ue.user_id
WHERE u.active = true
AND u.username_lower='slackmoehrle' 
ORDER BY u.id;

Ecco come appare user_custom_fields:

Idealmente, vorrei un unico record per utente, che mostri i campi desiderati più i valori delle righe in user_custom_fields.

Qualsiasi aiuto per capire le join o la sintassi è benvenuto?

1 Mi Piace

You could try using WITH queries to define temporary tables for your user custom fields. As an example, I have User Fields for phone number and address. I know that the phone number field is user_field_1 in my database and address is user_field_2. Here’s a query that will return the user’s email address, phone number, and street address, with one row for each user:

WITH user_field_1 AS (
SELECT ucf.value,
ucf.user_id
FROM user_custom_fields ucf
WHERE ucf.name = 'user_field_1'
),
user_field_2 AS (
SELECT ucf.value,
ucf.user_id
FROM user_custom_fields ucf
WHERE ucf.name = 'user_field_2'
)

SELECT
u.id AS user_id,
ue.email,
uf1.value AS phone_number,
uf2.value AS address
FROM users u
LEFT JOIN user_field_1 uf1
ON uf1.user_id = u.id
LEFT JOIN user_field_2 uf2
ON uf2.user_id = u.id
JOIN user_emails ue
ON ue.user_id = u.id

The easiest way I know of to find the name value of your user fields is to view the json of your user fields page (/admin/customize/user_fields.json). You’ll see the id for each field in the json data. A field with the id of 1 creates a user_custom_field with the name user_field_1. A field with the id of 2 creates a user_custom_field with the name user_field_2.

6 Mi Piace

This looks promising. I will work with it and see how I make out. Thank you for taking time out of your day to answer my post.

EDIT: This is the perfect solution. I integrated this to my existing work and things are performing great.

2 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.