Oi jÅ«s vaikai, nerÅ«kykit to kÄ… aÅ¡ rÅ«kau…

Žodžiu taip. KrapÅ¡tinÄ—ju čia vienÄ… tokiÄ… apmokÄ—jimo sistemÄ… (bÅ«na gi kartais tokių užsakovų norų – iÅ¡ gero daikto padarykit fufelį), tai tarp debesies užklausų kurias pagimdžiau viena buvo tokia nenormali (sudÄ—ta į perl kintamÄ…jį):

$disk_usage = "SELECT (SELECT
                        res.value*res.multiplier AS diskspace
                        FROM ve ve
                          LEFT JOIN resource AS r
                          ON ve.platform_id = r.platform_id
                          LEFT JOIN subscr_ve AS suve
                          ON ve.ve_id = suve.ve_id
                          LEFT JOIN subscr_orders AS sord
                          ON suve.subscr_id = sord.subscr_id
                          LEFT JOIN order_res AS res
                          ON sord.ar_doc_id = res.ar_doc_id
                          AND r.res_id = res.res_id
                        WHERE   ( suve.ve_id IS NOT NULL AND
                                sord.subscr_id IS NOT NULL AND
                                res.ar_doc_id IS NOT NULL AND
                                ve.ve_id=(SELECT ve_id
                                          FROM subscr_ve
                                          WHERE subscr_id='$sid'
                                          AND ve_id IS NOT NULL)
                        AND r.short_name IN ('diskspace'))
                        ORDER BY sord.start_date LIMIT 1) as space,
            (SELECT MAX(diskusage) AS diskusage
                    FROM ve_quota_stat_history
                    WHERE ve_id=(SELECT ve_id
                                 FROM subscr_ve
                                 WHERE subscr_id='$sid'
                                 AND ve_id IS NOT NULL)
                    AND interval_type=0
                    AND time_stamp BETWEEN '$times[0]' AND '$times[1]'
                    ORDER BY diskusage DESC LIMIT 1) as used;";

Kad dar nors kalba eitų apie MySQL 5.x – tada bÅ«tų galima labai supaprastinti reikalÄ…. Betgi dabar turiu bÄ—dÄ… su 4.1, kurios negalima upgradinti ar keisti. Sutinku, kad užklausa neoptimali (ir turint laiko netgi žinau kÄ… reiktų pakeisti), bet užtat veikia! =)
IÅ¡ vienos pusÄ—s – kapanotis po nedokumentuotus sistemos vidurius kaip ir neturÄ—tų smarkiai vežti, iÅ¡ kitos – užsivedžiau, ir galutiniame rezultate gavosi 2K eilučių monstras, kuris panaÅ¡u kad jau daro tai kÄ… reikia.
Sekant skaitytom frazÄ—m:

  • Kiekviena programa turi bent vienÄ… bugÄ…
  • KiekvienÄ… programÄ… galima sumažinti bent viena eilute

Padarom iÅ¡vadÄ…, kad kiekvienÄ… programÄ… galima sumažinti iki vienos eilutÄ—s, kurioje bÅ«tinai bus bugas…

Paskaičius tokių filosofijų bei paraÅ¡inÄ—jus tokias užklausas man nebereiks ir rÅ«kyt (ko ir taip nedarau jau gerÄ… laikÄ…) – nuo skriptavojimo užsivesiu. Laiku tik į klubÄ… kokį nulÄ—kt! ;-)

Loading Facebook Comments ...

Leave a Reply

Your email address will not be published. Required fields are marked *