Suuremast andmehulgast sobiva leidmisel aitab sageli andmete sortimine soovitud tunnuse järgi. Telefoniraamatust näiteks nime järgi numbri leidmine on suhteliselt lihtne toimetus. Numbri järgi kindlaks tegemine, et kellele see kuulub, nõuab aga palju rohkem vaeva. Kõik lihtsalt sellepärast, et telefoniraamat on sorditud nimede järgi.
Järgnevas näites täiendame kaupade loetelu otsinguvõimalusega. Andmebaasipõhises lehestikus ühe tulba järgi sortida on lihtne – tuleb vaid SELECT-lause lõppu kirjutada ORDER BY tulbanimi ning andmed saabuvadki sobivas järjestuses. Siin aga pakume kasutajale võimalust sortida andmed nimetuse, grupinime või hinna järgi – vajutades vastava tulba pealkirjale. Sellisel juhul tuleb vastavalt kasutaja valikule saada SQL-lausesse sobiva tulba nimi.
Koodi täiendades on mugav, kui õnnestub teha nii, et olemasolevad funktsioonid ka vanades kasutuskohtades tööle jäävad. Vanas variandis ei andnud me funktsioonile kysiKaupadeAndmed ette midagi – väljastati lihtsalt baasis leiduvad kaubad. Nüüd aga soovime, et funktsioon väljastaks kaubad sordituna etteantud tulba järgi. Funktsioonile saab andmeid ette anda parameetrite kaudu. Kui lihtsalt lisada funktsioonile kohustuslik parameeter sortimistulba määramiseks, siis ilma selle parameetrita ei saaks funktsiooni enam välja kutsuda. Siin näites pole sellest suurt muret, sest täiendus tuleks viia sisse vaid ühte kohta – sinna kus kaubaotsing.php failis andmeid teise faili järgi küsitakse. Mõnes suuremas rakenduses võidakse sama funktsiooni kasutada kümnetes ja sadades kohtades. Ning vahel kasutatakse abifunktsioonide teeke kogumikuna mõne teise rakenduse juures, millest abifunktsioonide loojal ei pruugi aimugi olla. Sellisel juhul tekitaks funktsioonile parameetrite lisamine paljudes kohtades. Mõnikord pole sellest pääsu – eriti kui jõudluse või turvalisuse huvides funktsioonilt osa oskusi maha võetakse. Parameetrite lisamisel aga saab üldjuhul muudele koodifailidele murede tekitamisest hoiduda pannes loodud parameetrile vaikimisi väärtuse. Siin näiteks siis lisatakse parameeter $sorttulp. Ning juhul, kui seda parameetrit funktsioonile ette ei anta (nt. siiamaani loodud kasutavate failide korral), sellisel juhul antakse sortimistulbale vaikimisi väärtuseks “nimetus”, st. et väljastatavad kaubad sorditakse nimetuse järgi tähestikulisse järjekorda.
[crayon-68109cdb08c2f246976029/]
Veebist saabuvaid andmeid ei või kunagi usaldada – näpuvea või pahatahtlikkuse tõttu võib sealt saabuvates päringutes sisalduda tont-teab-mida. Et saabuvad andmed me rakendust rikkuda ei saaks, tasub ära märkida, milliste tulpade järgi on lubatud sortida – praegu siis pikkus, grupinimi ja hind.
[crayon-68109cdb08c35392820333/]
Kui juhtub, et palutakse andmeid järjestada mõne muu (seni olematu) tunnuse järgi, siis lihtsalt katkestatakse funktsiooni töö veateatega. Kas ja mida väljakutsuv programm selle veateatega peale hakkab, on juba tema mure. Vähemasti ei satu sobimatud andmed edasi me SQL-lausessese andmebaasi sisse pahandust tegema.
[crayon-68109cdb08c37592478753/]
SELECT-lause on lihtne ja suhteliselt sarnane eelmise näite variandiga. Lihtsalt lõppu on tulnud määrang “ORDER BY $sorttulp”, mis siis vastavalt päringule asendatakse kas nimetuse, grupinime
või hinnaga.
[crayon-68109cdb08c38694893737/]
Väljakommenteeritud rida vea kuvamiseks on mugav vahend jälgimaks, kui miski ei taha tööle hakata. Selle käsu kaudu saab vajadusel välja trükkida MySQLi poolt avastatud vigade selgitused. Töötavasse lõppversiooni pole koodi soovitatav neid käsklusi sisse jätta – serveripoolsed veateated võivad hõlbustada häkkerite tööl. Enese jaoks arenduse käigus vigade kohta aimu saamiseks on selliste veateadete nägemine aga igati omal kohal.
[crayon-68109cdb08c3a457341336/]
Ülejäänud koodiosa jäi samaks – kergema kasutamise ja kopeerimise huvides on ta aga ka siia pandud.
[crayon-68109cdb08c3c158668235/]
Loodud abifunktsioone kasutame endiselt andmeotsingu lehel. Lehe algusesse tuleb juurde kontroll, kas aadressireal olevaks sort-parameetriks väärtuseks on saabunud midagi. Kui jah, siis palutakse andmed sordituna selle tunnuse järgi, muul juhul palutakse lihtsalt andmeid, kusjuures praegu siis sorditakse need funktsiooni vaikimisi parameetri ehk nimetuse järgi.
[crayon-68109cdb08c3e731565377/]
Sortimistulba mugavaks valimiseks tuleb tulbad vastavateks viideteks teha, igaüks saadab kaubaotsing.php lehele parameetri sort sobiva väärtusega.
[crayon-68109cdb08c40951559914/]
Muu fail ikka eelmise näitega sarnane.
[crayon-68109cdb08c42536642863/]
Nagu näitest näha võib, siis hinnale vajutades ka tulevad andmed hinna järjekorras.
