Where – in na více sloupcích
- nn2
- Člen | 9
Ahoj,
potřeboval bych radu, jestli je možný nějaký zápis výběru hodnot se
subdotazem na více sloupcích. Kód asi bude názornější
<?php
$ref = $database->table('a')->select('a, b')->group('a');
$res = $database->table('b')->where('a, b', $ref);
?>
Problém je v tom, že potřebuju, aby se mi dotaz přeložil na SELECT FROM b WHERE (a,b) IN (?,?) …, ale v současné implementaci se to překládá špatně, MySQL hlásí Cardinality error (nebo něco takového).
Ve zdroji SqlBuilder jsem si to opravil, a jde mi o to, jestli to nejde napsat za pomoci stávajících „nástrojů“.
Zkoušel jsem i
<?php
$res = $database->table('b')->where(array('a', 'b'), $ref);
?>
, to je ale určené k něčemu jinému.
Díky.
- Patrik Votoček
- Člen | 2221
co takhle:
$res = $database->table('b')->where(array('a' => $ref['a'], 'b' => $ref['b']));
nebo
$res = $database->table('b')->where(iterator_to_array($ref)); // tady si nejsem úplně 100 jistej
nebo
$res = $database->table('b')->where('a = ? AND b = ?', $ref['a'], $ref['b']);
- nn2
- Člen | 9
Chtěl jsem se tomu vyhnout, a maximálně využít jednoduchost zápisu. Udělal jsem na to hack v SqlBuilderu, aby to tak šlo psát, https://github.com/…tte/pull/831, ale nevím, jestli se to dá včlenit ;)
A navíc, není to ta, že bych na $res musel zavolat ještě fetch? Chtěl bych aby mi byl sestaven správný dotaz, do něho pak Nette doplní data z $res, stejně, jako to funguje pro
$res = $database->table(...);
$rows = $database->table(...)->where('id', $res);
Patrik Votoček napsal(a):
co takhle:
$res = $database->table('b')->where(array('a' => $ref['a'], 'b' => $ref['b']));
nebo
$res = $database->table('b')->where(iterator_to_array($ref)); // tady si nejsem úplně 100 jistej
nebo
$res = $database->table('b')->where('a = ? AND b = ?', $ref['a'], $ref['b']);