Oznámení
Ako napisat zlozitejsi SELECT s pouzitim CONCAT, REPEAT
před 8 lety
- mbskot
- Člen | 42
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
před 8 lety
- Milo
- Nette Core | 1119
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);
před 8 lety
- mbskot
- Člen | 42
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.
před 8 lety
- Milo
- Nette Core | 1119
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...)