Dotaz na všechny články v kategorii v Database Explorer

JiriHeralt
Člen | 3
+
0
-

Ahoj,
potřebuju z databáze vytáhnout všechny články, které patří buď do určité kategorie, nebo podkategorií této kategorie. V SQL jsem si sepsal tento dotaz

SELECT * FROM articles WHERE category in (SELECT id FROM categories WHERE id = $categoryId OR parent = $categoryId)

všechno ostatní mám řešené přes Database Explorer, existuje možnost, jak tento dotaz přepsat aby to bylo jednotné?

Díky! :)

Mysteria
Člen | 797
+
0
-

To zanoření může být pouze dvojúrovňové nebo i více? Protože pokud může být víceúrovňové, tak to pomocí DE nenapíšeš určitě, protože bys potřeboval rekurzivní CTE.

Editoval Mysteria (28. 10. 2018 20:13)

JiriHeralt
Člen | 3
+
0
-

Zanoření je naštěstí pouze dvouúrovňové. Já bych klidně zůstal u toho dotazu, ale tím že z toho nedostanu Database Selection, nemůžu použit klasicky např. ->page() apod.. s čímž už počítá zbytek aplikace.

Phalanx
Člen | 310
+
+4
-
<?php
$this->database->table('articles')
->where('category IN(SELECT id FROM categories WHERE id = ? OR parent = ?)', $categoryId, $categoryId)
...
?>

A dej si prosímtě ještě pozor na dodržování discovery reflection. Například: sloupec category v tabulce articles bys měl mít pojmenovaný jako categories_id + měl by to být cizí klíč do tabulky categories.

Pak bys mohl dotaz napsat i takhle:

<?php
$this->database->table('articles')
->where('articles.categories_id=? OR articles.categories.parent = ?)', $categoryId, $categoryId)
...
?>

No a pak je ještě dobré mít názvy tabulek pojmenované jednotně, ne množně – takže ne articles, ale article.

Editoval Phalanx (29. 10. 2018 7:46)

JiriHeralt
Člen | 3
+
0
-

Děkuju moc za rady. Nyní už to asi nemá smysl předělávat, ale v příštích projektech si na to dám pozor. :)