Kategorien und ihre Unterkategorien mit ODER

Manchmal möchten Sie Informationen zu Themen finden, die sich in bestimmten Kategorien befinden, sowie zu allen Themen in den Unterkategorien dieser Kategorien. Sie können die category_id jeder Unterkategorie zu Ihrer Abfrage hinzufügen, aber dies kann je nach Ihrer Kategorie-/Unterkategorie-Einrichtung zu einer ziemlich langen Liste führen. :slight_smile:

Eine alternative Methode ist, die Tabelle categories einzubeziehen und OR zu verwenden:
(Stellen Sie sicher, dass Sie den Wert an den Ihrer übergeordneten Kategorie anpassen)

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id = 5 OR c.parent_category_id = 5)

Sie können dies auch mit einem Parameter verwenden:

-- [params]
-- int :category_id

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id = :category_id OR c.parent_category_id = :category_id)

Und um es für mehrere Kategorien mit Unterkategorien anzupassen, können Sie den Parameter durch eine int_list-Version ersetzen und Ihre Abfrage anpassen, um IN wie folgt zu verwenden:

-- [params]
-- int_list :category_id

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (:category_id) OR c.parent_category_id IN (:category_id))

Oder kodieren Sie die übergeordneten Kategorien direkt in die Abfrage selbst:

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (4, 5) OR c.parent_category_id IN (4, 5))

Diese Abfragen sind hauptsächlich Beispiele, um die Prinzipien zu demonstrieren. Hoffentlich finden Sie sie nützlich, aber wenn Sie Fragen haben, stellen Sie diese bitte unten. :slight_smile:

7 „Gefällt mir“