tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

skladani dotazu? jak?

před 10 lety

wdolek
Člen | 331

vzhledem k tomu, ze mi TeXy proste nebere text, obsahujici odkaz do dokumentace a text, ktery obsahuje SQL, je muj dotaz na adrese: http://storage.wdolweb.cz/…otaz_001.txt

predem diky za jakoukoliv radu

(PS, mozna za nejakou dobu takovy dotaz vlozit pujde… ono to obcas jde, obcas ne – sam nevim proc. Davidovi sem to uz reportoval, ale odpoved zadna)

před 10 lety

wdolek
Člen | 331

tak sem si nakonec pohral s DibiFluent – jak jsem puvodne zamyslel… postnul bych vysledek meho konani, ale .) texy se to proste nelibi :(

před 10 lety

PetrP
Člen | 587
$w = array();
array_push($w, 'id = %i', 1);
array_push($w, 'name = %s', 'X', '+ %s', 'Y');
array_push($w, 'stamp = 1');

$o = array('name', 'stamp', 'id');

$s = array('SELECT * FROM table WHERE %and',$w ,'ORDER %by', $o);

$this->getDb()->test($s);

Jinak nechápu kde si tohle %s + %s v dokumentaci vyčetl. A s vkládáním odkazů ani zdrojáků nevidím problém.

Editoval PetrP (9. 8. 2009 1:44)

před 10 lety

vlki
Člen | 218

Tohle by taky nebylo zrovna košér… Modifikátor %and nahází mezi všechny prvky předaného pole samé ANDy. Vygeneruje tedy něco takového:

SELECT *
FROM table
WHERE id = %i AND 1 AND name = %s AND X AND + %s AND Y AND stamp = 1
ORDER `name`, `stamp`, `id`

Aby se modifikátory přidávané pomocí array_push aplikovaly, musí se použít modifikátor %ex. A ještě tam chybí klíčové slovo BY u order-by klauzule. Úprava dotazu s modifikátory %ex a BY:

$w = array();
array_push($w, array('%ex' => 'id = %i', 1));
array_push($w, array('%ex' => 'name = %s', 'X', '+ %s', 'Y'));
array_push($w, 'stamp = 1');

$o = array('name', 'stamp', 'id');

$s = array('SELECT * FROM table WHERE %and',$w ,'ORDER BY %by', $o);

$this->getDb()->test($s);

// SQL
SELECT *
FROM table
WHERE id = 1 AND name = 'X' + 'Y' AND stamp = 1
ORDER BY `name`, `stamp`, `id`

Ale osobně by mi teda zápis pomocí DibiFluent přišel mnohem přehlednější…

$this->getDb()->select('*')->from('table')
    ->where(array(
        'id%i' => 1,
        'name%ex' => array('= %s', 'X', '+ %s', 'Y'),
        'stamp%i' => 1,
    ))
    ->orderBy(array('name', 'stamp', 'id'))
    ->test();

před 10 lety

PetrP
Člen | 587

vlki napsal(a):

Tohle by taky nebylo zrovna košér…

Jasně šlo mi jen o ukázku toho jak správně použít modifikátory, protože uplně v základu nechápal sintaxy.

před 10 lety

wdolek
Člen | 331

vlki, PetrP: diky – to jsem to z te dokumentace zas vubec nepochopil :) … a s vkladanim clanku – chyba na me masince. linuxi FF ma asi nejaky problem s kodovanim ci co X-(