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

- JiriHeralt
- Člen | 3
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
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
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
<?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
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. :)