Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

mbskot
Člen
Registrovaný: 7. 1. 2011
Příspěvky: 59

Ako napisat zlozitejsi SELECT s pouzitim CONCAT, REPEAT

Cafte,
neviem si rady s napisanim takehoto selectu:

SELECT id, CONCAT(REPEAT("--", level), title) AS title FROM table;

skusam to spravit nejako takto:

getComp(array(
 'id',
 'CONCAT(REPEAT("--", level), title)' => 'title'));

public static function getComp($select)
{
  return dibi::select($select)
   ->from('table');
}

//alebo

public static function getComp($select)
{
  return dibi::query('SELECT %n', $select,
    'FROM table'
  )->fetchAll();
}

ale vtedy to cele berie ako nazov stlpca.

Chcel by som Vas poprosit o nazornu ukazku ako sa da takyto prikaz zapisat vo fluente alebo v klasickom dibi::query.

Dakujem za odpovede

 

#2 před rokem

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: Ako napisat zlozitejsi SELECT s pouzitim CONCAT, REPEAT

Lehce to asi nejde. Nejde na 100% rozeznat, co je název identifikátoru a co SQL kód. Řešil jsem to následovně:

$args = array(
    'id',
    'title1%sql' => 'CONCAT(REPEAT("--", [level]), [title])',
    'title2%sql' => array('CONCAT(REPEAT( %s, %n ), %n)', '--', 'level', 'title'),
    'int%i'      => 123,
);

$cols = array();
foreach( $args AS $key => $value )
{
    $parts = explode('%', (string) $key, 2);
    $modif = count($parts) > 1 ? $parts[1] : 'n';
    $cols[] = $db->translate( '%' . $modif, $value, '%if', !is_int($key), 'AS %n', $parts[0], '%end' );
}

$db->test('SELECT %SQL', $cols);

 

#3 před rokem

mbskot
Člen
Registrovaný: 7. 1. 2011
Příspěvky: 59

Re: Ako napisat zlozitejsi SELECT s pouzitim CONCAT, REPEAT

najs :)

otazka znie, ci nie je efektivnejsie napisat bud nejaky nativeQuery alebo ciastocne modifikovatelny query.
Ked chcem selectovat COUNT(), MAX() tiez to musim takto prevadzat? totiz v dibi som videl nejake funkcie (mozno) suvisiace s tymto, ale akosi som im neporozumel.

 

#4 před rokem

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: Ako napisat zlozitejsi SELECT s pouzitim CONCAT, REPEAT

mbskot napsal(a):

najs :)

Inspiroval jsem se u modifikátorů %a a %v.

otazka znie, ci nie je efektivnejsie napisat bud nejaky nativeQuery alebo ciastocne modifikovatelny query.

Nechápu, na co se ptáš.

Ked chcem selectovat COUNT(), MAX() tiez to musim takto prevadzat? totiz v dibi som videl nejake funkcie (mozno) suvisiace s tymto, ale akosi som im neporozumel.

Vím jen o funkci count() u DataSource a Fluentu. Ta ale funguje jako SELECT COUNT(*) FROM (...subquery...)

 

Zápatí