Jak zapsat EXISTS v Nette
- dreken
- Člen | 36
Zdravím,
Jak lze zapsat v Nette\Database něco jako tohle?
SELECT ... FROM tab WHERE EXISTS(SELECT ... FROM tab2 WHERE ...)
Zkoušel jsem to podle tohoto starého vlákna:
https://forum.nette.org/…tte-database
Ale nefunguje mi to, vypisuje to:
Column operator does not accept array argument
Díky za rady.
Editoval dreken (22. 9. 2014 23:13)
- dreken
- Člen | 36
OK :-)
Mám v databázi:
- Jednotlivé inzertní nabídky v tabulce
offer
- Parametry v tabulce
parameter
- Každá inzertní nabídka může mít přiřazených N typů parametrů,
existuje tedy spojovací nabídka
offer_parameter
Mám pohled, ve kterém potom potřebuji vypsat jednotlivé nabídky, které jsou uživatelsky filtrované. Například uživatel hledá vozy červené barvy s rokem výroby od 2000 do 2010 a se spotřebou do 8 l/100Km.
Editoval dreken (23. 9. 2014 10:22)
- David Grudl
- Nette Core | 8228
A
$db->query('SELECT ... FROM tab WHERE EXISTS(SELECT ... FROM tab2 WHERE ?)', $conds)
nestačí?
- dreken
- Člen | 36
Díky Davide, když už to říkáš Ty, tak asi v Nette PDO pro tento typ dotazu moc možností není. :-)
Zatím jsem to vyřešil takhle:
$subquery = $db->table("offer_parameter")->where("offer_parameter.offer_id = offer.id")->where(...);
$query = $db->table("offer")->where("EXISTS(" . $subquery->getSql() . ")");
Jediný problém, že v $subquery se to nevyžádaně JOINuje s
offer
kvůli podmínce:
->where("offer_parameter.offer_id = offer.id")
čili pak tento JOIN musím celkem prasácky ze $subquery odstraňovat…
Editoval dreken (23. 9. 2014 15:09)