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.
Azi am avut timp sa ma joc cu PHP 5.5 si cele mai interesante / importante noutati voi enumera in acest articol.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php // nu mai avem nevoi de return ;) function generator($start, $limit) { for ($i = $start; $i <= $limit; $i += 1) { yield $i; } } // se va afisa 1 2 3 4 5 foreach (generator(1,5) as $nr) { echo $nr . ' '; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $my_array = array ( array(1, 'ion'), array(2, 'maria') ); // se va afisa // ion 1 // maria 2 foreach ($my_array as list($id, $name)) { echo $name . ' ' . $id; } ?> |
1 2 3 4 | <?php echo [1, 2, 3][0]; // se va afisa 1 ?> |
1 2 3 4 5 | <?php echo 'PHP'[0]; // se va afisa P ?> |
Există foarte multe modalități pentru a obține vârsta într-o variabilă PHP. Pentru a afla vârsta este de ajuns să știm data nașterii.
1 2 3 4 5 6 7 8 9 10 11 | <?php define ('DATE_OF_BIRTH', '15-02-1984'); // zz-ll-aaaa $date_of_birth = new DateTime(DATE_OF_BIRTH); $today = new DateTime(); // for testing purposes $diff = $today->diff($date_of_birth); printf('%d years', $diff->y); ?> |
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; |
Sa presupunem ca aveti 2 array-uri cu nume utilizatori si doriti sa aflati:
Exemplu:
1 2 3 4 5 6 | <?php $user1_arr = array ('Vasile', 'Ion', 'andrei'); $user2_arr = array ('Ion', 'Andrei', 'Maria'); ?> |
Se va folosi functia array_diff($arr1, $arr2):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php $user1_arr = array ('Vasile', 'Ion', 'andrei'); $user2_arr = array ('Ion', 'Andrei', 'Maria'); // Verificam diferentele pornind de la primul array . $user1_diff_arr = array_diff($user1_arr, $user2_arr); // Rezultat // $user1_diff_arr = array ('Vasile', 'andrei'); // se observa ca in lista de rezultate apare 'andrei' desi nu ar trebui. Ei, array_diff() este case-sensitive, deci daca in primul array apare cu litere mici, in al doilea cu prima litera mare, se va lua in considerare ca si diferenta. // Pentru a face o diferentiere case-insensitive vom folosi functia array_udiff() $user1_diff_arr = array_udiff($user1_arr, $user2_arr, 'strcasecmp'); // Rezultat // $user1_diff_arr = array ('Vasile'); ?> |
Pentru punctul 2 se va porni de la al doilea array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php $user1_arr = array ('Vasile', 'Ion', 'andrei'); $user2_arr = array ('Ion', 'Andrei', 'Maria'); // Verificam diferentele pornind de la primul array . $user1_diff_arr = array_diff($user2_arr, $user1_arr); // Rezultat // $user1_diff_arr = array ('Andrei', 'Maria'); // Diferentiere case-insensitive vom folosi functia array_udiff() $user1_diff_arr = array_udiff($user2_arr, $user1_arr, 'strcasecmp'); // Rezultat // $user1_diff_arr = array ('Maria'); ?> |
Daca aveti intrebari puteti lasa un comentariu.
Pentru a subscrie toti utilizatorii in modulul SimpleNews in Drupal 7 avem de rulat urmatorul SQL:
1 | INSERT INTO intra_simplenews_subscriber(activated,mail,uid) SELECT 1,mail,uid FROM intra_users WHERE uid > 0 ORDER BY uid ASC; |
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 ?> |
Pentru a integra in tema functionalitatea de dezautentificare ajunge sa adaugi un parametru in url si daca este setat acest parametru sa se apeleze functia de logout din WordPress.
Linkul trebuie sa fie ceva de genu:
http://domeniul.tau/?out=1
Adauga urmatorul cod in functions.php in tema WordPress:
1 2 3 4 5 6 7 8 9 10 | <?php if ($_GET['out'] == 1 ) { wp_logout(); // in acest moment se va face delogarea wp_redirect(home_url()); // vom face redirect la prima pagina. Avem nevoie de un refresh ca sa se vada efectul de logout. } ?> |
Posibil ca la un moment dat vei avea nevoie de o logare automata pe baza de email. In mod normal pentru orice sistem de autentificare trebuie sa introduci un utilizator / o adresa email si o parola.
In WordPress se poate aplica un mic hack ce NU ESTE RECOMANDAT, dar va arat cum se poate implementa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // Aceasta functie se poate copie in folderul vostru de tema WordPress in fisierul functions.php // @param: string $email - adresa de email function autentificare_dupa_email ( $email ) { $user_id = email_exists($email); // daca exista adrese de email, functia va returna id-ul utilizatorului if (!$user_id) return false; // daca nu avem $user_id inseamna ca nu exista utilizatorul in baza de date, deci nu se va loga wp_set_current_user($user_id, $email); // setam utilizatorul curent in WordPress wp_set_auth_cookie($user_id); // creeam cookie-ul de autentificare pentru a pastra utilizatorul logat. } // Unde vrem sa apelam auto autentificarea introducem urmatoare linie: autentificare_dupa_email ('sandor@mailinator.com'); // Utilizatorul in acest moment este logat si se poate apela functia is_user_logged_in() ce va returna TRUE. ?> |