إنشاء تقرير للمستخدمين متضمناً حقولاً مخصصة

لقد ابتكرت هذه الطريقة السهلة للحصول بسرعة على معلومات المستخدم لكل مجموعة. تم تجميعها بناءً على اقتراحات الآخرين ومن شخص يفهم لغة SQL بعمق أكبر بكثير مما سأفهمه أنا أبدًا.

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

يمكنك تخصيص هذا الأمر برابط مباشر جميل لإدارة النظام أو حقولك المخصصة كما هو موضح في تعليقات الكود.

يبدو أننا لا نملك مستودعًا رائعًا لاستعلامات Data Explorer هنا في Meta حاليًا. آمل أن يكون هذا المكان مناسبًا.

--[params]
-- string :group_name

With included_users AS (
SELECT
gu.user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
e AS (
  SELECT email, user_id
  FROM user_emails u
  WHERE u.primary = true
)

  SELECT
    u.id AS user_id, u.name, u.username, e.email
    -- السطر التالي يمنحك رابطًا مباشرًا إلى لوحة تحكم المستخدم
    -- concat('/admin/users/',u.id,'/',u.username) AS admin_access_url
    -- السطر أدناه مع MAX يسمح لك بسحب الحقول المخصصة للمستخدم، كرر حسب الحاجة
    -- استبدل 'اسم الحقل' و"اسم العرض" بحقلك المستهدف
    -- MAX(CASE ucf.name WHEN 'اسم الحقل' THEN value END) AS "اسم العرض"
    -- *تأكد من وجود فاصلة بعد جميع الحقول ما عدا الحقل الأخير*

  FROM users as u
  LEFT JOIN user_custom_fields AS ucf on u.id = ucf.user_id
  RIGHT JOIN e on u.id = e.user_id
  RIGHT JOIN user_fields AS uf on concat('user_field_', uf.id) = ucf.name
  WHERE u.id IN (SELECT user_id FROM included_users)
  GROUP BY u.id, e.email
  ORDER BY u.username asc
5 إعجابات