استعلام user_custom_fields

يريد قسم التسويق لدينا بعض البيانات. يمكنني الاستعلام عن Discourse للحصول عليها. ومع ذلك، أواجه بعض الصعوبات مع user_custom_fields: لدينا حقول مخصصة متعددة، ويبدو أن كل حقل يمثل صفًا في الجدول لكل مستخدم. لذا قد يكون لدي 6-7 صفوف لكل مستخدم. أعمل على إجراء عملية ربط (join)، لكنني أبدأ في الحصول على العديد من الصفوف لكل سجل، لذا أحتاج إلى معرفة كيفية الاستعلام بشكل صحيح.

إليك ما لدي حتى الآن:

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;

إليك كيف يبدو user_custom_fields:

أفضل ما يمكنني تحقيقه هو الحصول على سجل واحد لكل مستخدم، يُظهر الحقول التي أريدها بالإضافة إلى القيم الموجودة في صفوف user_custom_fields.

أي مساعدة في فهم عمليات الربط أو بناء الجملة؟

إعجاب واحد (1)

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 إعجابات

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)

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