Cum schimbi valorile intre 2 campuri in MySQL?
Executand urmatoarea comanda poti schimba valorile intre 2 campuri MySQL:
UPDATE tbl_name SET x=(@temp:=x), x = y, y = @temp; |
unde:
- tbl_name este numele tabelei
- x denumire camp #1
- y denumire camp #2
Cum schimbi valorile intre 2 campuri in MySQL?
Executand urmatoarea comanda poti schimba valorile intre 2 campuri MySQL:
UPDATE tbl_name SET x=(@temp:=x), x = y, y = @temp; |
unde:
Acum cateva ore mi s-a cerut sa fac un JOIN in MYSQL, singura problema fiind ca in tabela relationala nu exista o coloana unde sa fie stocat id-ul inregistrarii din prima tabela.
EX tabel1:
==============
| id | title |
==============
| 1 | abc |
| 2 | bac |
==============
EX tabel2:
=========================
| id | id_string_tabel1 |
=========================
| 1 | tabel1_1 |
| 2 | tabel1_2 |
=========================
Dupa cum ati observat in tabelul 2 id-ul are un prefix, in exemplul de mai sus este: tabel1_
SQL-ul pentru JOIN in MySQL se face utilizand CONCAT
SELECT * FROM tabel1 t1 LEFT JOIN tabel2 t2 ON CONCAT('tabel1_', t1.id) = t2.id_string_tabel1 |
Daca aveti solutii mai simple/bune va rog sa lasati un comentariu.
De multa vreme nu am mai create proceduri stocate ( PROCEDURE ) in MySQL, dar azi s-au schimbat multe. Vreau sa impart cu voi 2 comenzi utile:
DELIMITER $$ CREATE PROCEDURE `numele_procedurii` (OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM nume_tabela; END $$ DELIMITER ; |
SHOW PROCEDURE STATUS; |
Pentru a se conecta la baza de date MySQL din PHP se vor folosi urmatoarele functii din PHP:
Parametrii
Aceasta functie doar se conecteaza, vizual nu se va vedea nimic
Parametrii
Aceasta functie doar selecteaza baza de date mentionata, vizual nu se va vedea nimic
Aceasta functie PHP inchide conexiunea cu baza de date.
Dorim sa ne conectam la baza de date locala avand ip-ul 127.0.0.1 la baza de date numita wordpress, utilizatorul alex si parola 123456
1 2 3 4 5 6 7 8 9 10 11 | <?php $con = mysql_connect("127.0.0.1","alex","123456"); // salvam conexiunea in variabila $con if (!$con) { die('Nu este posibila conectarea la baza de date din urmatoarele motive: ' . mysql_error()); } mysql_select_db("wordpress", $con); // selectam baza de date wordpress mysql_close($con); // inchidem conexiunea ?> |
Avem urmatoare tabela cu numele “prieteni”:
———————
| id | nume |
———————
| 1 | Vlad |
| 2 | Andrei |
| 3 | Delia |
Cerinta: Se cere sa se afiseze primele 2 caractere din campul nume folosind SQL.
Rezolvare : Se va folosi functia SUBSTRING(param1, param2, param3) din MySQL unde:
Solutia SQL:
===========
SELECT id, SUBSTRING(`nume`,1,2) FROM `prieteni`;
PDO ( PHP Data Object ) este o interfata ce permite accesarea bazei de date. Pentru a beneficia de avantajele PDO este recomandat sa aveti instalat PHP 5.1+ .
Ex 1: Conectare la baza de date MySQL ( instalat local )
In acest exemplu ne vom conecta la baza de date locala MySQL, mai concret la baza de date cu numele “test”.
Ex 2: Selectarea datelor din baza de date MySQL, iar in caz de eroare afisam mesajele de eroare
query(‘SELECT * FROM user’) as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “
“;
die();
}
?>
In exemplul 2 ne vom conecta la baza de date “test” si vom afisa toti utilizatorii cu toate campurile , iar daca se intampina o eroare atunci se va afisa un mesaj de eroare ( de ex: nu exista tabela “user” )
Tranzactii cu PDO
Folosim tranzactii cand avem de rulat mai multe comenzi SQL si daca cel putin unul dintre SQL-uri nu s-a executat cu success atunci se va face rollback, adica se vor anula si SQL-urile executate cu success.
Ex: Inserare in baza de date folosind tranzactii:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec(“insert into user (id, name, phone) values (1, ‘Ion’, ‘0259941’)”);
$dbh->exec(“insert into user_age (id, age) values (1, 16)”);
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo “Failed: ” . $e->getMessage();
}
?>
Obs: Daca unul dintre SQL-uri de inserare nu se executa cu success se va face rollback.
Un exemplu simplu de conectare la baza de date MySQL, usor de implementat, pentru incepatori. Ideea este ca avem nevoie de datele de logare cum ar fi : serverul, utilizator, parola, baza de date. Se face conexiune folosind functii php. Toate astea le salvam intr-un fisier “database.php” si se va include unde se doreste lucrul cu baza de date.
Cod database.php:
mysql_connect() este functia prin care ne conectam la baza de date .
Variabila $conn va avea o valoarea TRUE sau FALSE functie de rezultatul conectarii la serverul MySQL folosind functia mysql_connect(), iar in cazul esuarii va afisa mesajul continut de constructia die().
mysql_select_db este functia care stabileste baza de date la care ne vom conecta, avand ca parametrii numele bazei de date si identificatorul de acces la conexiunea catre serverul MySQL.
Dupa ce operatiile dorite au fost executate cu baza de date va trebui sa inchidem conexiunea folosind functia mysql_close() avand ca argument datele de acces la serverul MySQL.
mysql_close($conexiune);
Hai sa facem si un test creand fisierul test_mysql.php :
Mare atentie: Dupa ce am creat baza de date, si un utilizator in mysql, trebuie asociate utilizatorul cu baza de date. Pentru fiecare baza de date se pot asocia unul sau mai multi utilizatori mysql cu diferite drepturi.
Exista multe solutii pentru a importa o baza de date dintr-un fisier sql . Voi prezenta o metoda foarte usoara pentru a face un import de baza de date.
Aceasta solutie functioneaza doar din terminal, este necesara sa aveti conexiune la server.
De exemplu doriti un import din fisierul “tutoriale.sql” .
Foarte usor se poate face acest lucru.
Structura unui import Mysql :
mysql -u[utilizator] -p[parola] [nume_baza_de_date] < [nume_fisier]
Ex: mysql -uadmin -p1234 tutoriale si numele fisierului pentru export.
Bafta!
Exista multe solutii pentru a face o copie dupa baza de date intr-un fisier sql . Voi prezenta o metoda foarte usoara pentru a face un export pentru baza de date.
Aceasta solutie functioneaza doar din terminal, este necesara sa aveti conexiune la server.
De exemplu baza de date “tutoriale”, utilizator baza de date “admin”, parola “1234” si dorim sa facem un export in fisierul “tutoriale.sql” .
Nimic mai simplu:
mysqldump -uadmin -p1234 tutoriale > tutoriale.sql
!Atentie: dupa -u vine utilizator si dupa -p vine parola apoi numele bazei de date, semnul > si numele fisierului pentru export.
Structura export Mysql cu Mysqldump:
mysqldump -u[utilizator] -p[parola] [nume_baza_de_date] > [nume_fisier]
Bafta!
LEFT JOIN este o sintaxa destul de dificil de inteles, trebuie exersat foarte mult si se va intelege exersand. Partea de teorie pura va las sa studiat din alte surse: carti mysql, sau cautand pe google.
Va arat cum se foloseste LEFT JOIN si la ce ne ajuta. Consideram 2 tabele:
utilizatori:
=======================
nume | varsta =
=======================
ion | 23
andra | 32
maria | 17
======================
si tabelul localitati:
=======================
nume | localitate =
=======================
ion | Oradea
andra | Brasov
maria | Pitesti
======================
Consideram urmatoarea sintaxa MySQL:
SELECT utilizatori.nume,utilizatori.varsta, localitati.localitate
FROM utilizatori
LEFT JOIN localitati
ON utilizatori.nume = localitati.nume
Rezultatul acestei interogari va fi:
================================
nume | varsta | localitate =
================================
ion | 23 | Oradea =
andra | 32 | Brasov =
maria | 17 | Pitesti =
================================
Va rog sa nu ezitati sa va jucati cu LEFT JOIN pana cand va simtiti ca o stapaniti. Chestia asta nu este usoara!
Bafta!
Echipa Tutoriale PHP, CSS, MySQL, HTML