Alias
Un alias este creat folosing termenul AS urmat de un nume case-sensitive. Se foloseste in interogari SELECT pentru a da unei coloane un nume diferit in rezultatele returnate.
-
Exemplu:
In exemplele din aceasta lectie se foloseste urmatorul tabel, denumit "sites":
id | site | nr | reg_date |
1 | marplo.net | 5 | 2011-03-28 07:56:53 |
2 | www.coursesweb.net | 8 | 2011-03-28 07:57:40 |
Acest exemplu selecteaza inregistrarile din coloana "site" si le returneaza intr-un alias numit "st".
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `site` AS st FROM `sites`";
// executa interogarea si retine rezultatele
$result = $conn->query($sql);
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// afisaza datele din fiecare rand din $result
while($row = $result->fetch_assoc()) {
echo '<br />';
print_r($row);
}
}
else {
echo '0 rezultate';
}
$conn->close();
?>
In resultatele obtinute, valorile coloanei "site" vor fi returnate intr-un alt nume de coloana, denumita 'st'.
Afiseaza:
Array ( [st] => marplo.net )
Array ( [st] => www.coursesweb.net )
Se pot folosi mai multe aliasuri intr-o interogare SELECT, cate unul pentru fiecare coloana:
SELECT coloana1 AS nume1, coloana2 AS nume2 FROM nume_tabel
Aliasurile sunt de obicei folosite cu functii, pentru a returna rezultatul unei functii asociat cu un nume (dupa cum vedeti in exemplu de mai jos).
-
In mod standard, SQL nu suporta folosirea de aliasuri in interogari care au conditionala WHERE.
Functii MySQL
Cele mai multe din functiile MySQL sunt folosite cu interogarea SELECT pentru a formata datele returnate, dar puteti folosi functii MySQL si cu alte tipuri de interogari.
Pentru a aplica o functie intr-o instructiune SELECT, la valoarea unei coloane, interogarea va arata astfel:
-
Sintaxa:
SELECT coloana1, FUNCTIE(coloana2), coloana3 FROM nume_tabel
Nu trebuie sa lasati spatii intre numele functiei si parateza ei.
Functii pentru Text
Functiile pentru text sunt folosite cand se lucreaza cu siruri, pot fi aplicate fie cu numele coloanelor fie cu valori specifice.
Tabelul de mai jos contine cateva din cele mai utilizate functii MySQL pentru lucru cu text (
"t", poate fi text sau numele unei coloane).
Functie | Returneaza |
CONCAT(t1, t2, ...) | Un nou sir de forma "t1t2". |
CONCAT_WS(S, t1, t2, ...) | Un nou sir de forma t1St2S... (ignora coloanele care nu au valori) |
LENGTH(t) | Numarul de caractere din "t". |
LEFT(t, y) | Caracterul "y" cel mai aproape de partea stanga din "t". |
RIGHT(t, x) | Caracterul "x" cel mai aproape de partea deapta din "t". |
TRIM(t) | "t" cu spatiile de la capete sterse. |
UPPER(t) | "t" cu litere mari. |
LOWER(t) | "t" cu litere mici. |
SUBSTRING(t, x, y) | caracterele "y" din "t", incepand de la index "x" (indexat de le 0). |
expr REGEXP patern | Executa o cautare in "expr", dupa o expresie regulata specificata la "patern". |
- In urmatorul exemplu vom folosi functia CONCAT() pentru a uni intr-un singur sir valorile a doua coloane ("site" si "nr"), separate de o liniuta. Acest sir va fi returnat cu un titlu de alias numit "str":
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica in caz de eroare la conectare
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT CONCAT(`site`, ' - ', `nr`) AS str FROM `sites`";
// executa interogarea si stocheaza rezultatele
$result = $conn->query($sql);
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// afisaza datele pentru fiecare rand din $result
while($row = $result->fetch_assoc()) {
echo '<br />'. $row['str'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
?>
Aliasul "str" este cheia in array ce contine valorile returnate.
Codul de mai sus va returna:
marplo.net - 5
www.coursesweb.net - 8
• Pentru lista completa cu functiile MySQL pt. text, vedeti manualul MySQL:
Functii pentru siruri.
Functii numerice
Functiile numerice sunt folosite in lucrul cu numere, pentru a efectua operatii matematice. Ca si celelalte functii, ele pot fi utilizate fie cu numele coloanelor fie cu valori specifice.
In tabelul urmator sunt prezentate cateva din functiile numerice MySQL (
"n", poate fi un numar sau numele unei coloane).
Functia | Returneaza |
ABS(n) | Valoarea absoluta a lui "n". |
AVG(col) | Valoarea mijlocie (medie) a coloanei specificate. |
CEILING(n) | Urmatorul cel mai mare numar intreag dupa "n". |
FLOOR(n) | Valoarea intreaga a lui "n". |
FORMAT(n1, n2) | "n1" formatat ca un numar cu "n2" zecimale si cu virgula la fiecare 3 spatii. |
MIN(col) | Valoarea minima din coloana specificata. |
MAX(col) | Valoarea maxima din coloana specificata. |
MOD(n1, n2) | Resultatul impartirii lui "n1" la "n2". La fel ca si expresia cu simbolul procent (n1%n2) |
POW(n1, n2) | "n1" la puterea "n2" |
RAND() | Un numar aleatoriu intre 0 si 1.0 |
ROUND(n1, n2) | "n1" rotunjit la "n2" zecimale. |
SQRT(n) | Radical din "n". |
SUM(col) | Suma valorilor din coloana specificata. |
- In urmatorul exemplu vom selecta coloana "nr", cu functia POW() aplicata ei, urmata de un alias care va contine valoarea returnata de functia POW():
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `nr`, POW(`nr`, 3) AS pow3 FROM `sites` ORDER BY pow3";
// executa interogarea si stocheaza rezultatele
$result = $conn->query($sql);
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// afiseaza datele din fiecare rand din $result
while($row = $result->fetch_assoc()) {
echo '<br /> POW('. $row['nr']. ', 3) - '. $row['pow3'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
?>
Afiseaza:
POW(5, 3) - 125
POW(8, 3) - 512
- Functia RAND() poate fi folosita pentru a returna randurile intr-o ordine aleatorie:
SELECT * FROM nume_tabel ORDER BY RAND()
• Pentru lista completa cu functii numerice MySQL, vedeti manualul MySQL:
Functii numerice si operatori
Functii pentru Data si Ora
Coloanele specifice pt. Data si Ora din MySQL sunt destul de flexibile.
Daca vreti sa faceti calcule bazate pe o anume data sau sa returnati numai numele zilei din saptamana, MySQL are o functie pentru aproape fiecare scop de lucru cu Data si Ora.
Tabelul urmator contine cateva din cele mai utilizate functii MySQL pt. lucru cu data si ora. Ele pot fi aplicate fie cu numele coloanelor, fie cu valori specifice (
"dt", poate fi o valoare sau numele unei coloane).
Functie | Returneaza |
HOUR(dt) | Ora din "dt". |
MINUTE(dt) | Minutul din "dt". |
SECOND(dt) | Secundele din "dt". |
DAYNAME(dt) | Numele zilei din saptaana a datei din "dt". |
DAYOFMONTH(dt) | Numarul zilei din luna a datei din "dt". |
MONTHNAME(dt) | Numele lunii din an a datei din "dt". |
MONTH(dt) | Valoarea numerica a lunii din an, a datei din "dt". |
YEAR(dt) | Anul din "dt". |
CURDATE() | Data curenta. |
CURTIME() | Ora curent. |
NOW() | Data si ora curenta. |
UNIX_TIMESTAMP(dt) | Timpul Unix (numarul de secunde trecute de la "1 Ianuarie 1970 00:00:00 GMT" pana la momentul curent sau pana la data specificata). |
- Urmatorul exemplu afiseaza numele zilei din saptamana cand ultimul site a fost inregistrat:
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql
$sql = "SELECT `id`, `site`, DAYNAME(`reg_date`) AS weekday FROM `sites` ORDER BY `reg_date` DESC LIMIT 1";
// executa interogarea si stocheaza rezultatele
$result = $conn->query($sql);
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// parcurge si afiseaza datele din fiecare rand din $result
while($row = $result->fetch_assoc()) {
echo 'Ultimul site web: '. $row['site']. ' , id: '. $row['id']. ' - a fost inregistrat intr-o zi de '. $row['weekday'];
}
}
else {
echo '0 results';
}
$conn->close();
?>
Afiseaza:
Ultimul site web: www.coursesweb.net , id: 2 - a fost inregistrata intr-o zi de luni
Daca doriti sa preluati timpul UNIX dintr-o coloana de tip "Data si Timp", folositi urmatoarea formula:
SELECT UNIX_TIMESTAMP(coloana_data) AS nume_alias FROM nume_tabel
• Exista multe alte functii pt. data si ora, puteti vedea lista completa in manualul MySQL:
Functii pentru Data si Ora.