Imazh

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

Në këtë guidë të dytë të serisë së Bazave të MySQL do mësoni disa nga komandat dhe funksionet më të përdorura. Do ju shpjegoj si të Numëroni, Gruponi, Rendisni, Limitoni, Mblidhni, të gjeni Maksimumin dhe Minimumin.

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.

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?!

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

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

Disa të dhëna imagjinare në tabelë:

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

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.

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.

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

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

Kodi i mësipërm do prodhojë rezultatet e mëposhtme. Pra, si ç’e shikoni, emrat janë renditur alfabetikisht nga a-z.

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ë.

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

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).

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.

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.

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.

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

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.

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ë.

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

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.

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:

<?php
$rezultatet = mysql_query("SELECT COUNT(*) FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['COUNT(*)'];
?>

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”.

<?php
$rezultatet = mysql_query("SELECT COUNT(*) AS totali FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['totali'];
?>

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

<?php
$rezultatet = mysql_query("SELECT COUNT(*) AS totali FROM perdoruesit WHERE roli='moderator'");
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['totali'];
?>

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.

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.

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

<?php
$rezultatet = mysql_query("SELECT MIN(postime) AS min FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['min'];
?>

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().

<?php
$rezultatet = mysql_query("SELECT MAX(postime) AS maks FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo $vlerat['maks'];
?>

Si ju tregova, në MySQL është shumë e lehtë të gjindet minimumi dhe maksimumi i disa vlerave.

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.

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

<?php
$rezultatet = mysql_query("SELECT AVG(postime) AS mes FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo ceil($vlerat['mes']);
?>

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.

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.

<?php
$rezultatet = mysql_query("SELECT SUM(postime) AS shuma FROM perdoruesit");
$vlerat = mysql_fetch_array($rezultatet);
echo ceil($vlerat['shuma']);
?>

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.

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ë.

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

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:

normal -> 3
moderator -> 2
admin -> 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.

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ë.

Mësim të mbarë.

3 Komente

23 Qershor 2010
Ora: 20:45:48

Shume Faleminderit per kete tutorial, se me ka hyre shume ne pune.

Shpresoj qe tutorialet ne vijim te jene te nje niveli te tille dhe me te shpeshta.

Ky eshte Feniksi…  (Përgjigju)

25 Qershor 2010
Ora: 10:04:49

Shumë artikull i mirë nga një sy i shpejt që i hodha. Kisha një pyeta:

Ku ndryshon myslq_ nga mysqli_? Kam lexuar ca gjëra kohet e fundit dhe aty komandat kishin atë i-në pas mysql.  (Përgjigju)

25 Qershor 2010
Ora: 12:51:17

MySQLi eshte ekstension i PHP-se, i menduar te ofroje funksionalitetet e MySQL Server pas versionit 4.1.3. Praktikisht zevendeson “MySQL extension” dhe keshillohet nga vete manuali i PHP-se te perdoret per servera MySQL 4.1.3+. Shto ne listen e avantazheve edhe funksionimin me objekte, prepared statements, transaksionet, etj dhe kuptohet qe eshte alternative shume me e mire se ekstensioni baze.

Ne kete guide kam perdorur mysql_ sepse nuk po bej asgje me te vecante se disa veprime baze, keshtu qe nuk ja vlente ta nderlikoja. Por tani qe ma kujtove, mund te nevojitet nje seri guidash kastile per MySQLi :)   (Përgjigju)

Jepni Mendimin Tuaj

* Emri, Emaili edhe Komenti janë të detyrueshme

Nëse doni të qëndroni gjithmonë të informuar rreth lajmeve që postohen në faqen tonë, pa pasur nevojë që të hyni përdit këtu, ne ju këshillojmë të abonoheni me E-mail.
Ne e urrejmë SPAM-in kështu që mund të regjistroheni pa problem. Ne ju premtojmë që do të merrni E-mail vetëm atëher kur të ketë postime të reja.

RSS Feeds E-Mail:

Shkruaj në Feniksi!

Ne paguajmë nëse ju shkruani një tutorial dhe publikohet tek faqja jonë.

Mëso më Shumë

MG ARTs WpAlb.com ShqipAD Webmaster.AL Host.AL Reklamo

Përkufizime Teknike

Virus: Janë programe që dëmtojnë kompjuterin tuaj e që merren zakonisht nga interneti. Ato fshihen në programe ose dokumenta të ndryshëm dhe përdorim kompjuterin e infektuar për tu përhapur më tej. Qëllimi i tyre varion në bazë të virusit.

Quize

Ju jeni këtu: Faqja Kryesore » Bazat e MySQL me PHP 2 – Renditja, Grupimi, Limitimi, etj FillimShko në fillim

Info Info mbi Feniksi

Feniksi.Com është një faqe e cila përmban tutoriale të ndryshme mbi webdesign, programimi, grafik, këshilla mbi ndërtimin e faqeve e shumë gjëra të tjera. Për ne nuk është e thjeshtë ta shpjegojmë me disa fjalë, kështu që jua lejmë juve këtë gjë. Nëse keni ndonjë sugjerim për faqen apo ndonjë këshillë përmirësimi, ju lutem na kontaktoni.