العثور على الوظائف ذات الصلة بالسمات مع وظيفة واحدة محددة في الخلية

StackOverflow https://stackoverflow.com/questions/1216099

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي هذه الجداول: الرسائل (post_is والعنوان والنص)، الكلمات (TAG_ID، علامة)، Post_tag_nn (الهوية، TAG_ID، POST_ID). أريد لشغل وظيفة معينة وجود على سبيل المثال 4 علامات جميع الوظائف مع تلك العلامات، ثم كل المشاركات مع أي ثلاثة من هذه العلامات، ثم كل المشاركات مع أي اثنين من هذه العلامات وهلم جرا. كيف يمكنني بناء استعلام SQL لهذا الغرض (في بي يبدو وكأنه مشكلة التراجع = جميع مجموعات فرعية من مجموعة معينة).

هل كانت مفيدة؟

المحلول

هل لديك استعلام للعثور على علامات للوظيفة الحالية، شيء من هذا القبيل

SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;

وبعد ذلك استخدام هذه العلامة هوية، ويجب أن هذا الاستعلام بإرجاع لك لمعرف المشاركات مع 4،3،2، ... علامات مطابقة:

SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;

نصائح أخرى

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

وشيء من هذا القبيل:

select t.id, t.tag_id, p.post_id, p.title, p.text
  from post_tag_nn as t, posts p
  where p.id = t.post_id
  order by t.id

وبعد ذلك تفعل مجموعة في التعليمات البرمجية. هل يمكن بالطبع قيام اثنين من الاستفسارات المختلفة، واحد حيث يمكنك معرفة النظام وعدد من العلامات الخاصة بك وبعد ذلك واحدة حيث يمكنك سحب منصب لكل علامة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top