prieteni care nu sunt comuni
Moderatori: Zamolxe, Moderatori
varianta PHP.
NETESTAT!
[php]<?php
$prietenii_lui_1 = array();
$prietenii_lui_2 = array();
$sql = mysql_query('SELECT uid, who FROM prieteni WHERE agreed = 1 AND (uid IN (1,2) OR who IN(1,2))');
while($row = mysql_fetch_assoc($sql))
{
if($row['uid'] == 1 OR $row['who'] == 1)
{
$prietenii_lui_1[] = ($row['who'] == 1) ? $row['uid'] : $row['who'];
}
if($row['uid'] == 2 OR $row['who'] == 2)
{
$prietenii_lui_2[] = ($row['who'] == 2) ? $row['uid'] : $row['who'];
}
}
$prieteni = array_diff($prietenii_lui_1 , $prietenii_lui_2);
?>[/php]
NETESTAT!
[php]<?php
$prietenii_lui_1 = array();
$prietenii_lui_2 = array();
$sql = mysql_query('SELECT uid, who FROM prieteni WHERE agreed = 1 AND (uid IN (1,2) OR who IN(1,2))');
while($row = mysql_fetch_assoc($sql))
{
if($row['uid'] == 1 OR $row['who'] == 1)
{
$prietenii_lui_1[] = ($row['who'] == 1) ? $row['uid'] : $row['who'];
}
if($row['uid'] == 2 OR $row['who'] == 2)
{
$prietenii_lui_2[] = ($row['who'] == 2) ? $row['uid'] : $row['who'];
}
}
$prieteni = array_diff($prietenii_lui_1 , $prietenii_lui_2);
?>[/php]
eu as zice in primul rand ca trebuie sa desparti gandirea de baze de date, de gandirea de php. Logica bazei de date inseamna stocarea datelor si prelucrarea lor intern, pe cand in php le oferi clientilor.
in alta ordine de idei, e o buna practica sa folosesti proceduri stocate, rutine, view-uri care stocheaza acest selecturi sau alte prelucrari in baza de date.
Doua conexiuni PHP-MySql sunt mai costisitoare decat una singura cu un recordset mai mare.
Lucrurile astea basic, sunt folosite mai la toate tehnologiile ce folosesc baze de date, nu doar in cazul PHP-MySql.
E mai la indemana sa faci mai multe conexiuni din php sau sa "cari" date, atunci cand proiectezi, dar e mai curat, si mai usor de intretinut sa faci cat mai putin trafic intre php si mysql.
in alta ordine de idei, e o buna practica sa folosesti proceduri stocate, rutine, view-uri care stocheaza acest selecturi sau alte prelucrari in baza de date.
Doua conexiuni PHP-MySql sunt mai costisitoare decat una singura cu un recordset mai mare.
Lucrurile astea basic, sunt folosite mai la toate tehnologiile ce folosesc baze de date, nu doar in cazul PHP-MySql.
E mai la indemana sa faci mai multe conexiuni din php sau sa "cari" date, atunci cand proiectezi, dar e mai curat, si mai usor de intretinut sa faci cat mai putin trafic intre php si mysql.
Salut,
Ai incercat varianta scrisa de mine ? Am testat codul si la mine merge ... am facut chiar 2 tabele si le-am populat pentru tine
... nu fac asta de obicei dar am vrut sa vad daca gasesc o interogare care sa rezolve problema propusa de tine.
Incearca sa schimbi:
useri.id='1' - 1 aici este id-ul primului user
useri.id='2' - aici 2 este userul cu care vrei sa compari primul user si sa iti returneze prietenii necomuni
HAVING `nr`='1' - nu modifica nimic aici .... conditia asta este pusa sa iti returneze inregistrarile care apar o singura data (un prieten comu apare de 2 ori)
Eu zic sa mai incerci odata codul scris de mine ca e bun. (asta daca am inteles eu ce vrei sa faci). Daca tot nu iti iese da-mi pm si ne auzim pe mess sa iti dau si mysql'ul.
Bafta!
Ai incercat varianta scrisa de mine ? Am testat codul si la mine merge ... am facut chiar 2 tabele si le-am populat pentru tine
Incearca sa schimbi:
useri.id='1' - 1 aici este id-ul primului user
useri.id='2' - aici 2 este userul cu care vrei sa compari primul user si sa iti returneze prietenii necomuni
HAVING `nr`='1' - nu modifica nimic aici .... conditia asta este pusa sa iti returneze inregistrarile care apar o singura data (un prieten comu apare de 2 ori)
Eu zic sa mai incerci odata codul scris de mine ca e bun. (asta daca am inteles eu ce vrei sa faci). Daca tot nu iti iese da-mi pm si ne auzim pe mess sa iti dau si mysql'ul.
Bafta!
Useri si Prieteni sunt tabelele cu date in ele:
- si Ion si Ana sunt prieteni cu Maria (nu ar trebui sa apara la interogare)
- Ion este prieten cu Mihai si cornel
- Ana este prietena cu Alexandra
Query 1 este fara conditia HAVING `nr` = '1' pentru a se vedea ca apare si maria acolo dar apare de 2 ori (coloana `nr`) deoarece este prietena cu ambii useri.
Query 2 se pune conditia de mai sus.
Nu stiu daca asta trebuia sa faca .... dar sper sa ajute in vreun fel.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 12 vizitatori
