أنا أحاول إضافة فلتر آخر حيث إذا كان المستخدم قد تم إنشاؤه قبل أقل من يومين من إنشاء موضوع معين، فلن يتم تضمينه.
هذا ما جربته. أنا جديد نسبيًا في SQL لذا لست متأكدًا من كيفية المتابعة. أي مساعدة؟
SELECT *
FROM topic t post_actions pa INNER JOIN users u ON u.id = pa.user_id
WHERE post_id = 1
AND post_action_type_id = 2
AND u.created_at < t.created_at-2
أحاول إصلاح فلتر التاريخ لاستبعاد المستخدمين الذين تم إنشاؤهم قبل أقل من يومين من إنشاء موضوع معين. قيل لي إما datediff أو INTERVAL ولكن لم ينجح أي منهما.
وكنت بحاجة إلى مساعدة في إضافة الموضوع t كـ inner join آخر ولكنني قمت بحل ذلك باستخدام: FROM post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id
يظهر معرف t كرقم بدلاً من معاينة، هل هناك أي طريقة للتعامل مع ذلك أيضًا؟
أعتقد أنني نجحت في ذلك باستخدام هذا. كان هناك أكثر من 1000 نتيجة من هذا، لذا حاولت إضافة AND t.id = post.topic_id
هذا قلل القائمة إلى 16 نتيجة، لكن لا تزال هناك 4 نتائج لنفس الشيء. لست متأكدًا من كيفية إصلاح ذلك.
SELECT
t.id as topic_id,
pa.post_id,
pa.user_id,
pa.created_at,
u.created_at
FROM post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id INNER JOIN posts p on p.topic_id = p.topic_id
WHERE post_id = 15000
AND t.id = 7000
AND post_action_type_id = 2
AND u.created_at < t.created_at - INTERVAL '2 DAY'
تعديل: تم تغيير INNER JOIN posts p on p.topic_id = p.topic_id
إلى INNER JOIN posts p on p.topic_id = t.id
مما أدى إلى تقليصها إلى 16 نتيجة كما كان من قبل.
الآن أعتقد أن السبب في وجود 16 نتيجة لا يزال هو أن t.id = t.id. لست متأكدًا مما يمكنني تغييره إليه.
هناك بعض المشاكل مع هذا، على الرغم من أنني لست بارعًا بما يكفي في SQL لشرحها بالكامل.
أعتقد أنك لن تحتاج إلى topic_id إذا كان لديك بالفعل post_id، حيث أن معرف المنشور فريد لهذا المنشور (والموضوع). يبدو أيضًا أنك تحاول ربط بعض الجداول الإضافية بحقول غير موجودة في الجدول الثاني (على سبيل المثال، t.id = t.id هو نفس الحقل تمامًا داخل جدول المواضيع). وإذا كان الموضوع الذي تستعلم عنه ثابتًا، فلن تحتاج إلى INTERVAL نسبي لأنه سيكون دائمًا نفس التاريخ (أي قبل يومين من إنشاء المنشور 15000)، لذا يمكنك تعيينه كتاريخ صريح.
لم تتح لي الفرصة لتجربة نسختي الخاصة بعد، لكنني تعلمت معظم مهاراتي في SQL/الشارات من البحث في Meta عن أمثلة مختلفة وجمع أجزاء منها. الكثير منها تحت علامة التصنيف #data-explorer، وهناك مجموعة من الأمثلة لأشياء مختلفة في بعض أفكار استعلامات الشارات الشائعة والتي قد تستحق التصفح؟
نعم أعرف، ولكن في كل مرة أقوم فيها بإزالة AND لمعرف الموضوع، تعود النتائج إلى 1000 لسبب ما. سألقي نظرة على الرابط الذي أرسلته. آمل أن أتمكن من حل بعض المشكلات هناك.
لست متأكدًا مما إذا كنت أفهم ما تريده هنا، ولكن إذا كنت تعرف معرف المنشور والتاريخ الذي تريد تضمين مستخدمين جدد منه، فربما يكون شيئًا كهذا؟
-- [params]
-- int :post_id
-- date :date
SELECT pa.user_id,
pa.created_at AS reltime$time
FROM post_actions pa
JOIN users u ON u.id = pa.user_id
WHERE pa.post_id = :post_id
AND post_action_type_id = 2
AND u.created_at::date > :date
ORDER BY pa.created_at DESC
هذا سيعطي قائمة بالمستخدمين الذين أعجبوا بمنشور معين، والذين تم إنشاء حساباتهم بعد التاريخ الذي تدخله (مرتبة حسب وقت إعجابهم).