Bazat e MySQL me PHP 2 Renditja, Grupimi, Limitimi, etj

Albforumi

Primus registratum
Bazat e MySQL me PHP 2 Renditja, Grupimi, Limitimi, etj

Në guidën e parë rreth MySQL me PHP ju tregova si të bëni disa nga veprimet themelore për t’ju hapur rrugën drejt përdorjes së një baze të dhënash në aplikacionet që kodoni. Nëse jeni fillestar absolut në MySQL (dhe SQL në përgjithësi) ju këshilloj ta lexoni atë guidë një herë, përndryshe nuk do kuptoni shumë këtu.</p>


Qëllimi i kësaj guide është që ta përdorim një databazë për më tepër se disa veprime të thjeshta selektimi apo ndryshimi. Do t’ju tregoj disa komanda të thjeshta, por ndërkohë mjaft të nevojshme për të: Renditur, grupuar, limituar, numëruar, gjetur maksimumin e minimumin, gjetur mesataren dhe shumën. Më duhet t’ju them se disa nga këto komanda mund të replikohen thjeshtë me funksionet e PHP, por do ishte një praktikë vërtetë e keqe. MySQL është optimizuar që ti kryejë këto veprime me maksimumin e efikasitetit, prandaj pse mos ti përdorim?!</p>


Si fillim do krijoj një tabelë dhe do e mbush me disa të dhëna për ti ilustruar shembujt me vlera reale.</p>


Tabela “perdoruesit”
————————
id – INT – PRIMARY – AUTO INCREMENT
emri – TINYTEXT
roli – ENUM(‘normal’, ‘moderator’, ‘admin’)
postime – INT</p>


Disa të dhëna imagjinare në tabelë:</p>


id – emri – roli – postime
—————————-
1 – Genci – admin – 544
2 – Tani – moderator – 312
3 – Zana – moderator – 253
4 – Genti – normal – 109
5 – Mandi – normal – 247
6 – Linda – normal – 392</p>


Me tabelën e krijuar dhe të dhënat në vendin e tyre, mund të nisim menjëherë me komandat që na interesojnë për ti manipuluar këto të dhëna.</p>
Renditja (ORDER BY)


Renditjen e të dhënave e ilustrova kalimthi që në guidën e parë, megjithatë mendoj se meriton një vend të dedikuar për ta shpjeguar pak fare më mirë. Komanda për ti renditur informacionet sipas një kolone të caktuar është ORDER BY.</p>


Shembulli më poshtë i rendit të dhënat alfabetikisht (a-z) sipas emrit.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT emri, postime FROM perdoruesit ORDER BY emri&quot;);
while($vlerat = mysql_fetch_array($rezultatet)){
echo $vlerat['emri'] . ' - ' . $vlerat['postime'] . '&lt;br /&gt;';
}



Kodi i mësipërm do prodhojë rezultatet e mëposhtme. Pra, si ç’e shikoni, emrat janë renditur alfabetikisht nga a-z.</p>
Genci - 544
Genti - 109
Linda - 392
Mandi - 247
Tani - 312
Zana - 253



Po sikur të duam që rezultatet të shfaqen në rend zbritës? Le të themi që na duhet ti rendisim përdoruesit sipas numrit të postimeve, nga personi me më shume postime në atë me më pak. Shumë e thjeshtë! Mjafton të shtojmë komandën DESC (Descending – Zbritës) dhe këtë e kam ilustruar më poshtë.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT emri, postime FROM perdoruesit ORDER BY postime DESC&quot;);
while($vlerat = mysql_fetch_array($rezultatet)){
echo $vlerat['emri'] . ' - ' . $vlerat['postime'] . '&lt;br /&gt;';
}
?&gt;



Kodi i mësipërm do të prodhojë rezultatin e mëposhtëm. Përdoruesit janë renditur sipas numrit të postimeve në rend zbritës (i madhi deri tek i vogli).</p>
Genci - 544
Linda - 392
Tani - 312
Zana - 253
Mandi - 247
Genti - 109


Duke përdorur komandën ORDER BY arritëm ti rendisim të dhënat në rend rritës dhe zbritës, duke i shfaqur të dhënat nga tabela në mënyrën që donim. Kjo është një nga komandat e përdorura më shpesh në aplikacione sepse logjikisht të dhënat duhen renditur para se të shfaqen.</p>
Limitimi (LIMIT)


Limitimi është gjithashtu një komandë që do e përdorni shumë shpesh në aplikacione. Sintaksa është vërtetë e thjeshtë dhe do e shpjegoj me vetëm dy raste.</p>


Veprimi që dua të kryej është shfaqja e 3 përdoruesve me më shumë postime në tabelën tonë. Për këtë do përdor edhe ORDER BY.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT emri, postime FROM perdoruesit ORDER BY postime DESC LIMIT 3&quot;);
while($vlerat = mysql_fetch_array($rezultatet)){
echo $vlerat['emri'] . ' - ' . $vlerat['postime'] . '&lt;br /&gt;';
}
?&gt;



Kodi mësipër i rendit përdoruesit sipas numrit të postimeve në rend zbritës (pra më i madhi në fillim) dhe i limiton rezultatet me vetëm 3 rreshta. Pra përfitojmë vetëm 3 rreshtat e parë të rezultatit të kthyer.</p>


Limitimi mund të marrë gjithashtu formë tjetër, ku përcaktojmë rreshtin e nisjes dhe atë të përfundimit. Po ju jap një shembull. Në tabelën e përdoruesve dua të marr vetëm 3 përdorues, duke filluar nga përdoruesi i 2. Dua të marr përdoruesit me id 2, 3 dhe 4. Realizimi është shumë i thjeshtë.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT emri, postime FROM perdoruesit LIMIT 1,3&quot;);
while($vlerat = mysql_fetch_array($rezultatet)){
echo $vlerat['emri'] . ' - ' . $vlerat['postime'] . '&lt;br /&gt;';
}
?&gt;



Besoj e vini re sintaksën e ndryshuar dhe 2 numrat e vendosur pas LIMIT. Numri i parë përcakton rreshtin fillestar; kini parasysh që rreshti i parë në databazë përcaktohet me numrin 0, prandaj kam shkruar 1 dhe jo 2 për të filluar tek rreshti i dytë. Ndërsa numri i dytë përcakton sa rreshta më pas (përfshirë rreshtin fillestar) duam të zgjedhim (në këtë rast 3). Kodi i mësipërm do të shfaqë rezultatet e mëposhtme.</p>
Tani - 312
Zana - 253
Genti - 109
Numërimi (COUNT)


Numërimi është një funksion fare i thjeshtë i cila përdoret vetëm për një qëllim – e gjetët, është pikërisht për të numëruar të dhënat. Nëse do donim të dinim sa përdorues ka tabela jonë, atëherë do shkruanim kodin e mëposhtëm:</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT COUNT(*) FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['COUNT(*)'];
?&gt;



Kodi i mësipërm shfaq numrin 6, që është numri i përdoruesve në tabelë. Më thjeshtë se kaq nuk ka ku të shkojë, sidoqoftë do ju tregoj edhe 2 shembuj të tjerë për t’ju ofruar pak më tepër mësim. Shembulli i parë prodhon egzaktësisht të njëjtin rezultat si ai më sipër, por do të përdor një variabël në MySQL për të ruajtur vlerën e COUNT(*). Në këtë mënyrë kodi është paksa më i bukur e më i thjeshtë për tu përdorur; ndoshta në këtë shembull nuk bie aq shumë në sy, por në kode të avancuara variablat të “shpëtojnë jetën”.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT COUNT(*) AS totali FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['totali'];
?&gt;



Në shembullin e dytë do kombinojmë funksionin COUNT dhe komandën WHERE për të numëruar sa moderatorë kemi në tabelë.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT COUNT(*) AS totali FROM perdoruesit WHERE roli='moderator'&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['totali'];
?&gt;



Kjo është praktikisht gjithçka që ju duhet të dini rreth numërimit. Si ekstra po ju them se është provuar me teste se COUNT është më e shpejtë se funksioni i PHP mysql_num_rows(), edhe prej vetë arkitekturës së MySQL, por edhe prej faktit se query-t ruhen në cache dhe ripërdoren pa pasur nevojë të ripërpunojë tabelën.</p>
Minimumi (MIN) dhe Maksimumi (MAX)


Minimumi dhe maksimumi janë funksione që në praktikë nuk gjejnë përdorim masiv (të paktën sipas eksperiencës time), por atëherë kur duhen, e bëjnë punën më së miri. Përdorimi është fare i thjeshtë dhe për ti ilustruar do ju jap 2 shembuj.</p>


Shembulli i parë gjen përdoruesin me më pak postime në tabelë.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT MIN(postime) AS min FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['min'];
?&gt;



Rezultati do të jetë 109. Me egzaktësisht të njëjtën ide, do gjejmë përdoruesin me numrin më të lartë të posimeve duke përdorur funksionin MAX().</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT MAX(postime) AS maks FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['maks'];
?&gt;



Si ju tregova, në MySQL është shumë e lehtë të gjindet minimumi dhe maksimumi i disa vlerave.</p>
Mesatarja (AVG) dhe Shuma (SUM)


Për ti kompletuar njohuritë e veprimeve të thjeshta matematike (nëse mund të quhen të tilla), do merremi me funksionet e mesatares dhe shumës. Përsëri përdorimi është shumë i thjeshtë dhe ngjason me COUNT, MIN dhe MAX.</p>


Le të shkruajmë një kod që gjen mesataren e postimeve në tabelën e përdoruesve.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT AVG(postime) AS mes FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo ceil($vlerat['mes']);
?&gt;



Me një query të ngjashme me ato që kemi përdorur deri tani, gjeta mesataren e postimeve. Mund ta keni parë funksionin ceil() dhe ndoshta po pyesni veten çfarë është! Funksioni ceil() e rrumbullakos numrin në vlerën e lartë dhe të plotë më të afërt (tavan – ceiling). Pa funksionin ceil(), rezultati do ishte: 309.5000, ndërsa me ceil() vlera është: 310.</p>


Në shembullin në vijim do ilustroj se si mund të gjejmë shumë e të gjitha postimeve me vetëm një query duke përdorur funksionin SUM. Sintaksa është përsëri e ngjashme me ato që kemi përmendur deri tani, prandaj s’duhet të ketë asgjë të re përveç SUM.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT SUM(postime) AS shuma FROM perdoruesit&quot;);
$vlerat = mysql_fetch_array($rezultatet);
echo ceil($vlerat['shuma']);
?&gt;

Grupimi (GROUP BY)


Përmes grupimit i mbledhim të dhënat në grupe (sigurisht) sipas një karakteristike të caktuar. Në teori mund të mos ketë shumë sens, prandaj le të kalojmë menjëherë në shembuj.</p>


Dua të di sa përdorues kemi për çdo rol. Pa përdorur groupim, do më duhej të bëja 3 query të ndryshme (SELECT COUNT(*) FROM perdoruesit WHERE roli=’x'), 1 për secilin rol. Po sikur të kisha 20 role të ndryshme? Do më shtohej kodi pa arsye. Me grupim e realizojmë me vetëm një query, të ilustruar më poshtë.</p>

&lt;?php
$rezultatet = mysql_query(&quot;SELECT COUNT(*) AS totali, roli FROM perdoruesit GROUP BY roli&quot;);
while($vlerat = mysql_fetch_array($rezultatet)){
echo $vlerat['roli'] . ' -&gt; ' . $vlerat['totali'] . '&lt;br /&gt;';
}
?&gt;



Më thjeshtë se kaq nuk bëhet. I kam grupuar të dhënat sipas rolit dhe kam afishuar totalin e rreshtave për secilin rol. Kodi i mësipërm prodhon rezultatin e mëposhtëm:</p>
normal -&gt; 3
moderator -&gt; 2
admin -&gt; 1


Ky është përdorimi bazë i GROUP BY dhe nuk ka më shumë për tu diskutuar. Mund të përdorni funksionet e treguara më sipër për të llogaritur Shumën, Mesataren, Minimumin dhe Maksimumin e postimeve për secilin grup. Mund të përdorni gjithashtu edhe komandën WHERE për të filtruar të dhënat apo ORDER BY për ti renditur.</p>


Ky ishte mësimi i dytë i serisë “Bazat e MySQL me PHP”. Kam akoma shumë për t’ju mësuar rreth MySQL, por njohuritë që keni marrë deri tani do ju lejojnë të bëni shumë veprime me baza të dhënash dhe janë funksionet/komandat më të përdorura. Në të ardhmen do ju tregoj komanda që do ju shkurtojnë kodin ose do e optimizojnë atë.</p>


Mësim të mbarë.</p>


Bazat e MySQL me PHP 2 – Renditja, Grupimi, Limitimi, etj &euml;sht&euml; nj&euml; postim nga: Feniksi.Com - Thesari i Njohurive</p>
-lmgL02AhIo

Per me shume artikuj te ngjashem vizitoni: http://www.feniksi.com/?p=1353
 
Top