# كيف يمكن تتبع نشاط المستخدم؟

**URL:** https://meta.discourse.org/t/how-to-track-user-activity/132241
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [30 أكتوبر 2019، 1:55م UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241 "2019-10-30T13:55:01Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![manchestermania](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manchestermania/32/147706_2.png) [@manchestermania](https://meta.discourse.org/u/manchestermania)
#### Post date: [30 أكتوبر 2019، 1:55م UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241/1 "2019-10-30T13:55:01Z")

</div>

مرحباً بالجميع..

أحتاج حقاً إلى مساعدتكم لتتبع نشاط المستخدمين باستخدام مستكشف البيانات.

**الإدخال** : اسم المستخدم والتاريخ

النتيجة المتوقعة من الاستعلام هي على النحو التالي:

| اسم المستخدم | التاريخ | المواضيع المنشورة | المنشورات المنشورة | الإعجابات المستلمة | إجمالي الكلمات |
| --- | --- | --- | --- | --- | --- |
| المستخدم أ | 01-10-2019 | | | | |
| | 02-01-2019 | | | | |
| | 03-01-2019 | | | | |
| | … | | | | |
| | 31-01-2019 | | | | |
| المستخدم ب | 01-10-2019 | | | | |
| | 02-01-2019 | | | | |
| | 03-01-2019 | | | | |
| | … | | | | |
| | 31-01-2019 | | | | |
| المستخدم ب | 01-10-2019 | | | | |
| | 02-01-2019 | | | | |
| | 03-01-2019 | | | | |
| | … | | | | |
| | 31-01-2019 | | | | |
| المستخدم ج | 01-10-2019 | | | | |
| | 02-01-2019 | | | | |
| | 03-01-2019 | | | | |
| | … | | | | |
| | 31-01-2019 | | | | |
| … | | | | | |
| المستخدم ز | 01-10-2019 | | | | |
| | 02-01-2019 | | | | |
| | 03-01-2019 | | | | |
| | … | | | | |
| | 31-01-2019 | | | | |

شكراً جزيلاً لمساعدتكم…

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [1 نوفمبر 2019، 2:00ص UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241/2 "2019-11-01T02:00:40Z")

</div>

> [@manchestermania](#):
>
> **الإدخال** : اسم المستخدم والتاريخ
> 
> النتيجة التي أتمنى الحصول عليها من الاستعلام هي كالتالي،

لا أعتقد أن المدخلات التي سرّدتُها تتطابق مع المخرجات التي تأمل في الحصول عليها. إذا كنت ترغب في الحصول على بيانات لمستخدم واحد، فقد يعمل استعلام مثل ما يلي كنقطة انطلاق. يستخدم الاستعلام تعبيرات الجدول المشترك (Common Table Expressions) لجعل الاستعلام أسهل في القراءة والكتابة. يمكن اتباع النمط نفسه لإضافة المزيد من البيانات إلى النتائج.

شيء واحد لم أكن متأكدًا منه هو ما إذا كنت تريد مجموع البيانات ليوم معين، أم عدد الإجراءات التي تمت في كل يوم. على سبيل المثال، هل تريد معرفة أنه في `2019-10-31` أنشأ المستخدم _إجماليًا_ 20 منشورًا في جميع الأيام التي كان فيها على الموقع، أم تريد معرفة أنه في `2019-10-31` أنشأ المستخدم بالضبط 3 منشورات؟ الطريقة التي تم بها هيكلة الاستعلام حاليًا تعيد النتيجة الثانية.

```sql
--[params]
-- string :username
-- date :start_date

WITH target_user AS (SELECT id FROM users WHERE username = :username),
days AS (
SELECT day::date
FROM GENERATE_SERIES(:start_date, NOW()::date, INTERVAL '1 day') AS day
),
topics_created AS(
SELECT
tu.id,
day,
COUNT(tu.id) AS topics
FROM topics t
JOIN target_user tu
ON tu.id = t.user_id
JOIN days
ON t.created_at::date = day
WHERE t.archetype = 'regular'
AND t.deleted_at IS NULL
GROUP BY day, tu.id
),
posts_created AS(
SELECT
tu.id,
day,
COUNT(tu.id) AS posts,
SUM(array_length(regexp_split_to_array(raw, '\s'), 1)) AS word_count
FROM posts p
JOIN target_user tu
ON tu.id = p.user_id
JOIN days
ON p.created_at::date = day
WHERE p.post_type = 1
AND p.deleted_at IS NULL
GROUP BY day, tu.id
),
likes_received AS (
SELECT tu.id,
day,
COUNT(tu.id) AS likes_received_count
FROM user_actions ua
JOIN target_user tu
ON tu.id = ua.user_id
JOIN days
ON ua.created_at::date = day
WHERE ua.action_type = 2
GROUP BY day, tu.id
)

SELECT
d.day,
COALESCE(topics, 0) AS topics,
COALESCE(posts, 0) AS posts,
COALESCE(word_count, 0) AS word_count,
COALESCE(likes_received_count, 0) AS likes_received
FROM days d
LEFT JOIN topics_created tc
ON tc.day = d.day
LEFT JOIN posts_created pc
ON pc.day = d.day
LEFT JOIN likes_received lc
ON lc.day = d.day
ORDER BY d.day

```

---

<div class="post-metadata">

### Author: ![manchestermania](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manchestermania/32/147706_2.png) [@manchestermania](https://meta.discourse.org/u/manchestermania)
#### Post date: [4 نوفمبر 2019، 3:22ص UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241/3 "2019-11-04T03:22:15Z")

</div>

> [@سيمون، مشاركة:2، موضوع:132241](#):
>
> أمر واحد لم أكن متأكدًا منه هو ما إذا كنت تريد مجموع البيانات ليوم معين، أم عدد الإجراءات التي تم اتخاذها في كل يوم.

أريد عدد الإجراءات التي تم اتخاذها في كل يوم، تمامًا مثل الاستعلام الذي قدمته لنا.

شكرًا جزيلاً لك يا سيدي على مساعدتك… إنها تساعدنا حقًا.

---

<div class="post-metadata">

### Author: ![manchestermania](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manchestermania/32/147706_2.png) [@manchestermania](https://meta.discourse.org/u/manchestermania)
#### Post date: [5 مارس 2021، 2:29ص UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241/4 "2021-03-05T02:29:18Z")

</div>

لزيادة نشاط المستخدمين، نخطط لإقامة تحدي لتحديد أكثر المستخدمين نشاطًا في منتدانا، ومنحهم مكافآت.

لذلك، أردنا الحصول على بيانات إضافية لجعل التحدي أكثر إثارة.

> _البيانات المتوفرة لدينا، باستخدام الاستعلام من @simon، تشمل: المواضيع، المنشورات، عدد الكلمات، واللايكات المستلمة_

تشمل البيانات الإضافية ما يلي:

- **اللايكات الممنوحة** : عدد اللايكات التي قدمها المستخدم.
- **الزيارات** : عدد المرات التي فتح فيها المستخدم المنتدى.
- **وقت القراءة** : المدة التي يقضيها المستخدم في المنتدى.
- **المتابَعون والمتابعون**.
- **معاينات المواضيع** : عدد مرات معاينة المواضيع التي أنشأها المستخدم.
- **ردود المواضيع** : عدد الردود (المنشورات) التي تلقاها المستخدم في جميع المواضيع التي أنشأها.

يرجى مساعدتنا للحصول على هذه البيانات الإضافية.

بالنسبة لوزن كل عنصر، نخطط لاستخدام Excel. هل لديكم أي نصائح حول كيفية وزن كل عنصر لتحديد الفائز؟

نريد جعل هذا التحدي جادًا وممتعًا في آن واحد. أفضل المستخدمين هم من يجمعون بين الأكثر نشاطًا، والأكثر فائدة، والأكثر شعبية. 🥳🥳🥳

مرة أخرى، شكرًا جزيلًا لكم على مساعدتكم.

**ملاحظة** : هل يمكننا الحصول على البيانات على شكل مجموعات، بحيث ندخل فقط معرف المجموعة؟ خطتنا هي وضع جميع المشاركين في مجموعة واحدة. حاليًا، يجب إدخال معرف المستخدم لكل مشارك على حدة.

---

<div class="post-metadata">

### Author: ![juliafagelman](https://avatars.discourse-cdn.com/v4/letter/j/b9bd4f/32.png) [@juliafagelman](https://meta.discourse.org/u/juliafagelman)
#### Post date: [22 يونيو 2021، 9:27ص UTC](https://meta.discourse.org/t/how-to-track-user-activity/132241/5 "2021-06-22T09:27:23Z")

</div>

مرحبًا @manchestermania

أنا أيضًا من سكان مانشستر 🙂  
شركتي تبحث عن تنظيم مسابقة مماثلة داخليًا لتعزيز التفاعل مع مجتمعنا من قبل الموظفين.

هل تمكنت من تنفيذ المسابقة؟ كيف قمت في النهاية بسحب البيانات؟ وكيف قمت بوزن مقاييس التفاعل المختلفة في النهاية؟

أود جدًا التحدث معك!

شكرًا لك  
جوليا
