tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

dibi, postgresql a order by

před 3 lety

Hobbit
Člen | 1

Zdravim,
s dibi jsem v podstate naprosty zacatecnik, asi neco nechapu, ale:
uz tu par hodin resim jednu vec, ktera mene skutecne vytaci – a sry, ale dokumentace je celkove vice nez skoupa, nebo jak jsem napsal proste ji nechapu.

potrebuji napsat naprosto primitivni dotaz (v tabulce ipranges jsou je proste hromada cidr zaznamu):
SELECT range FROM ipranges WHERE ‚9.9.172.74‘ <<= ipranges.range ORDER BY masklen(ipranges.range) DESC LIMIT 1;

primo v sql to je jedna radka, ale do dibi se mi zaboha nedari dostat spravne konstrukci okolo ORDER BY.

nebyl by nekdo natolik ochotny a tento primitivni dotaz neprepsal do dibi syntaxe?

Editoval Hobbit (26. 5. 2016 11:46)

před 3 lety

Honza Kuchař
Backer | 1649

Nechápu, co ten dotaz má dělat.

před 3 lety

Milo
Nette Core | 1119

@Hobbit asi už s křížkem po funusu.

Jestli používáš plain query:

$db->query('
    SELECT
        range
    FROM
        ipranges
    WHERE
        %s::inet <<= ipranges.range', '9.9.172.74', '
    ORDER BY
        masklen(ipranges.range) DESC
    LIMIT 1
');

a jestli fluent, je to trochu tricky, protože ->orderBy() očekává modifikátor %by, viz. Fluent.php source, a musí se dát do dvojrozměrného pole, ve kterém jsou prvky expandovány modifikátorem %ex:

$db
    ->select('range')
    ->from('ipranges')
    ->where('%s::inet <<= ipranges.range', '9.9.172.74')
    ->orderBy([['masklen(ipranges.range)']]);