prieteni care nu sunt comuni

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori


Avatar utilizator
teachme
Senior Member
Mesaje: 550
Membru din: Mar Aug 17, 2010 11:52 am

Mesajde teachme » Lun Oct 17, 2011 11:21 am

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]

Avatar utilizator
ispas
Senior Member
Mesaje: 656
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Lun Oct 17, 2011 3:03 pm

ms,dar printr-un singur query nu se poate face?adica un count(*) ceva,fara sa folosesc while

lucianmoi
PHPRomania Supporter
Mesaje: 22
Membru din: Mie Sep 23, 2009 12:06 pm

Mesajde lucianmoi » Lun Oct 17, 2011 3:54 pm


Avatar utilizator
ispas
Senior Member
Mesaje: 656
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Lun Oct 17, 2011 4:21 pm


lucianmoi
PHPRomania Supporter
Mesaje: 22
Membru din: Mie Sep 23, 2009 12:06 pm

Mesajde lucianmoi » Lun Oct 17, 2011 6:26 pm


w3apps
Average Member
Mesaje: 156
Membru din: Joi Sep 02, 2010 11:41 pm

Mesajde w3apps » Lun Oct 17, 2011 8:40 pm


Avatar utilizator
ispas
Senior Member
Mesaje: 656
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mar Oct 18, 2011 7:47 pm


Avatar utilizator
teachme
Senior Member
Mesaje: 550
Membru din: Mar Aug 17, 2010 11:52 am

Mesajde teachme » Mar Oct 18, 2011 8:31 pm

as avea o curiozitate.
cei cu experienta ma pot lamuri.

dintre varianta cu un SELECT si restu' PHP si varianta cu mai multe SELECT-uri (ultima sau cea a lui w3apps) care este cea optima (viteza mare, resurse putine consumate) ?

lucianmoi
PHPRomania Supporter
Mesaje: 22
Membru din: Mie Sep 23, 2009 12:06 pm

Mesajde lucianmoi » Mar Oct 18, 2011 9:20 pm

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.

w3apps
Average Member
Mesaje: 156
Membru din: Joi Sep 02, 2010 11:41 pm

Mesajde w3apps » Mar Oct 18, 2011 9:35 pm

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!

lucianmoi
PHPRomania Supporter
Mesaje: 22
Membru din: Mie Sep 23, 2009 12:06 pm

Mesajde lucianmoi » Mar Oct 18, 2011 9:58 pm


w3apps
Average Member
Mesaje: 156
Membru din: Joi Sep 02, 2010 11:41 pm

Mesajde w3apps » Mie Oct 19, 2011 2:00 am



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.

Avatar utilizator
zeuscool
Senior Member
Mesaje: 250
Membru din: Mie Sep 05, 2007 10:59 am
Localitate: Constanta
Contact:

Mesajde zeuscool » Mie Oct 19, 2011 8:21 am

neata, nu am somn

Avatar utilizator
ispas
Senior Member
Mesaje: 656
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mie Oct 19, 2011 12:42 pm



Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 11 vizitatori