tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Chytřejší styl zápisu, mnoho opakování hodnot za zástupné modifikátory

před 7 lety

Kcko
Člen | 286
+
0
-

Zdravím pánové,

Dibi používám již delší dobu a jsem spokojen. Momentálně mě trápí jistá forma zápisu:

$a = 10;
$b = 10;


dibi::fetchAll("SELECT .. FROM ... WHERE parametr = %i AND parametr = %i AND parametr = %i AND parametr = %i, $a, $b, $a, $b);

Je to pouze modelová ukázka, používám složitější dotazy, podmínky, subdotazy atd a dosazuji např. pouze 2 unikátní hodnoty, ale musím je dosadit třeba 10×.

tj.

SELECT .... , $a, $b, $a, $b, $a, $b, $a, $b  // neda se toto nějak ZREDUKOVAT, abych nemusel opakovat tolik stejných hodnot kolik je parametrů?

před 7 lety

Milo
Nette Core | 1100
+
0
-

Piš dotazy na víc řádků a proměnné hned za modifikátory

dibi::fetchAll('
    SELECT
        *
    FROM
        table
    WHERE
        parameter = %i', $a, '
        AND
        parameter = %i', $b, '
        AND
        parameter = %i', $a, '
');

před 7 lety

Kcko
Člen | 286
+
0
-

Milo: ano, o tom samozřejmě vím, ale není to to, co jsem čekal. Lépe to nejde? Pokud ne, tak se nic neděje, jen mě to zajímalo.

před 7 lety

Milo
Nette Core | 1100
+
0
-

Aha, já myslel že Tě trápí ten zápis všeho až na konec. Pak možná ještě:

$sql = array();
$sql[] = 'SELECT .. FROM ... WHERE parametr = %i AND parametr = %i AND parametr = %i AND parametr = %i';
for ($i = 0; $i < 4; $i++) {
    $sql[] = $a;
    $sql[] = $b;
}

dibi::fetchAll($sql);

Jinak mě nic nenapadá, o žádném „opakovači argumentů“ nevím.

před 7 lety

Kcko
Člen | 286
+
0
-

Nene, trápil mě „opakovač argumentů“, i o tomto způsobu vím. Přesto děkuji za pomoc a snahu.

před 7 lety

LuKo
Člen | 114
+
0
-

Jaký je SQL dotaz? Třeba by to šlo zoptimalizovat tam, abys nemusel argumenty opakovat.

Editoval LuKo (25. 6. 2012 13:02)

před 7 lety

Kcko
Člen | 286
+
0
-

Dotazy jsou často dlouhé a složité. Toto není problém SQL dotazů, ale problém opakování argumentů, které neumožňují chytřejší a pohodlnější zápis. Oba možné způsoby uvedl již dibi-kolega Milo, takže pokud to nejde nějak vylepšit, nemá smysl se bavit o přepisování dotazů ;-), díky.