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. :)