الحصول على جميع المنشورات لفئة معينة بمعرف مطابق لمعلمات معينة

لقد قمت بتطوير استعلام SQL يحصل على جميع المشاركات في موقعي التي تحتوي على كلمات رئيسية معينة، ولكني أود تقييد المشاركات بمعرف فئة معين. هل يعرف أي شخص كيف أفعل ذلك بالنظر إلى أن (كما يبدو) category_id ليس أحد الحقول في جدول “posts”؟ إليك استعلامي (الذي قمت بتشغيله وهو يعمل بشكل جيد ولكنه يسحب من جميع المشاركات وأريد فقط المشاركات من فئة واحدة):

-- [params]
-- string_list :first_list_of_keywords
-- null string_list :second_list_of_keywords

WITH FirstFilter AS (
    SELECT *
    FROM posts
    WHERE EXISTS (
        SELECT 1
        FROM UNNEST(ARRAY[:first_list_of_keywords]) AS s(word)
        WHERE POSITION(LOWER(s.word) IN LOWER(posts.raw)) > 0
    )
), SecondFilter AS (
    SELECT *
    FROM posts
    WHERE NOT EXISTS (
        -- Ensure there is NO missing keyword in the post text
        SELECT 1
        FROM UNNEST(ARRAY[:second_list_of_keywords]) AS t(word)
        WHERE POSITION(LOWER(t.word) IN LOWER(posts.raw)) = 0
    )
)

SELECT p.*
FROM posts p
INNER JOIN FirstFilter f ON p.id = f.id
INNER JOIN SecondFilter s ON p.id = s.id

تحتاج فقط إلى توسيع عبارة WHERE للبحث عن topic_id مقابل جدول topics، والذي سيحتوي على العمود category_id.

-- [params]
-- int :category_id
-- string_list :first_list_of_keywords
-- null string_list :second_list_of_keywords

WITH FirstFilter AS (
    SELECT *
    FROM posts
    WHERE topic_id IN (
        SELECT id FROM topics WHERE category_id = :category_id
    ) AND EXISTS (
        SELECT 1
        FROM UNNEST(ARRAY[:first_list_of_keywords]) AS s(word)
        WHERE POSITION(LOWER(s.word) IN LOWER(posts.raw)) > 0
    )
), SecondFilter AS (
    SELECT *
    FROM posts
    WHERE NOT EXISTS (
        -- Ensure there is NO missing keyword in the post text
        SELECT 1
        FROM UNNEST(ARRAY[:second_list_of_keywords]) AS t(word)
        WHERE POSITION(LOWER(t.word) IN LOWER(posts.raw)) = 0
    )
)

SELECT p.*
FROM posts p
INNER JOIN FirstFilter f ON p.id = f.id
INNER JOIN SecondFilter s ON p.id = s.id
4 إعجابات

شكراً، لقد نجح هذا.

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

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