Formátování SQL v PHP stringu rubrika: Programování: PHP

Anonym
položil/-a 25.11.2014

Dotaz aktualizován

Zdravím,
jakým způsobem formátujete SQL kód v PHP stringu?

Momentálně formátuji cca následovně.

class exampleClass
{
    /* 
      Pro úplnost: 
        - SQL se snažím vždy odsazovat dle ostatního kódu, prakticky to 
          tedy bývá minimálně 8 (+ název proměnné a rovnítko + 2) mezer od okraje
        - v některých kódech jsem viděl heredoc syntax, kdy je kód vždy zarovnán úplně k levému okraji, 
          to se mi moc nelíbí. 
    */
 
    public function exampleMethod()
    {
        // u velmi jednoduchých dotazů používám one-liner, proměnná nemá smysl - pořád je to přehledné
        $result1 = dibi::query("SELECT foo FROM bar");
 
 
        /* 
          Pokud by se nemělo celé volání vejít do 80 znaků a zároveň není dotaz nikterak komplikovaný, 
          ještě pořád ho zápíši přímo do volání sql metody, zde ale přichází první necelistvost. 
 
          Občas to zapíši takhle (A2): 
        */
        dibi::query("SELECT        
            foo 
        FROM 
            bar
        WHERE 
            xyz > aosd
        LIMIT 
            0, 1"
        );
 
        // .. jindy zase takhle (B2)
        dibi::query("       
            SELECT 
                foo
            FROM 
                bar
            WHERE
                xyz > aosd
        ");
 
 
        /* 
          U dlouhých/složitých dotazů pak používám vždy proměnnou, ale opakuje se zde stejný problém:
            - dát SELECT/INSERT/UPDATE na nový řádek, nebo na řádek s proměnnou? A ukončení dotazu? Středník? 
        */
        //
        $sql2 = "SELECT
            FROM
               foo
            WHERE
                bar
            ...
            LIMIT 
                0, 1"; 
 
 
        // dalším "problémem" jsou závorky, např. u insertů 
        $sql3 = "
            INSERT INTO 
                tbl_name 
                (
                    a,b,c
                ) VALUES ( 
                    1,2,3,4,5,6,7,8,9
                )
            ";
    }

Rád bych se držel nějakých pravidel typu "takhle to dělá většina". Samotné PHP se snažím formátovat ve stylu PHP-FIG/PSR.

Najde se spoustu různých dalších SQL (v PHP) konstrukcí, nemá je zde cenu všechny vypisovat. O co mi především v tomto dotazu šlo je především dopátrat se nějakého předpisu, který je běžný, vytvořit si nějaký systém, jak to psát konzistentně.
Z Vašich odpovědí mi došlo, že u SQL žádný standart tak úplně neexistuje.
Mým cílem je především to, aby kód který napíšu byl co nejčitelnější pro co největší procento programátorů okolo - tedy kolegů, spolupracovníků apod.

Co se týče různých abstrakcí nad SQL, jsou samozřejmě případy kde se
to hodí, ale taky případy, kdy je to zbytečné. I když na první pohled se mi Doctrine/DibiFluent/whatever líbilo, někdy mi přijde
přehlednější/účelnější napsat si to SQL přímo. A o tomto je toto vlákno.

Všem děkuji za reakce, z některých příspěvků jsem načerpal inspiraci.
Abych se vyjádřil i k Vašim postům, osobně se mi nejvíc líbí zápisy Kita, onelooka a kohvena.

Díky!

odkaz Vyřešeno
9 pavel.stehule
odpověděl/-a 19.11.2014

Formatovaní SQL je subjektivní. Neexistuje převažující zápis - a teď už mi to ani nepřijde divné. Ve většině firem se ustálí typická sada a vzory SQL dotazů, a dovedu si představit různý zápis, tak aby výsledek byl co nejčitelnější. Osobně preferuji kompaktnější zápis, který definoval Joe Celko - nemám rád vertikální nebo horizontální nudle:

SELECT DISTINCT pilot 
  FROM PolotSkills AS PS1
 WHERE NOT EXISTS
       (SELECT *
          FROM Hangar
         WHERE NOT EXISTS
               (SELECT * 
                  FROM PilotSkills AS PS2
                 WHERE PS1.pilot = PS2.pilot 
                   AND PS2.plane = Hangar.plane
               )
       ); 

Komentáře

  • Anonym : Musím říct, že toto nevypadá špatně. Nedá se někde najít jen nějaký základní souhrn toho, jak to pan Celko vydefinoval? Přiznám se bez mučení, že se mi kvůli tomu nechce kupovat jeho kniha, jen bych trochu rád nahlédl.. 25.11.2014
  • pavel.stehule : @oNeDaL: K nahlednuti urcite v technicke knihovne - nicmene Joe Celko's SQL Programming Style doporucuji (+ na netu se daji dohledat pdfka jeho knizek, pripadne v google books se daji nalezt ukazky) 25.11.2014

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.