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. ![]()
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. ![]()