Логика за общи приятели

oniq

Registered
Здравейте,
вчера мислих, чудих се, ваях се, въртях се, усуквах, правих и пак провал. :D

За новия ми проект, искам да сложа общи приятели с даден потребител, но логиката ми идва леко сложна.
Имам таблица с приятели от вида.


Код:
id , user_id, friend_id, approve

*id - ID на полето

*user_id - потребителят изпратил поканата за приятелство

*friend_id - потребителя одобрил приятелство

*approve - дали е одобрена заявката за приятелство 0/1


как да сметка логиката да извадя например общите приятели м/у 2ма потребителя???
 
хммм не съм сигурен но пробвай с тази заявка

PHP:
mysql_query("SELECT * FROM table WHERE approve='1' AND ((friend_id ='id lognat' AND user_id='id na fr') AND (friend_id ='id na fr' AND user_id='id lognat')) ")or die(mysql_error());
 
Това донякъде сработи, а как да разбера, кои са общите приятели. А не само колко са.... си вадя броя!! :p
 
Кода ми е тази заявка, която ми даде.... няма друг код за общите приятели.

:)
 
[sql]SELECT
f1.name, f2.name
FROM
relation_users u
LEFT JOIN
users f1 ON f1.id = u.user_id AND f1.approve = 1
LEFT JOIN
users f2 ON f2.id = u.friend_id AND f2.approve = 1
WHERE
f1.id_user = '$id'
[/sql]
Като си оправиш малко полетата, би трябвало да стане :-)
 
Ще е хубаво малко повечко информация.... поне съкращенията ги кажи, няма да е лошо. 8)
 
========Базата Данни========
Аз съм го правил това с 2 таблици.Ако горните методи не помагат пробвай с този.

1ва таблица:users - тук са потребителите
имаш 2 полета id и username

2ра таблица friends имаш 3 полета fr_id,username и friend ( и ако искаш си сложи approve)
======PHP кода=======
$user_id = потребителското име на човека,който разглеждаме.Например ако името се взима чрез $_GET:
$user_id=$_GET['id'];

и заявката за извеждане да стане така
Код:
<?php
$fr2 = mysql_query("SELECT * FROM friends WHERE username='$user'") or die (mysql_error());
//Горния код е без да е нужно одобрение,за одобрение слагаш долния код
//$fr2 = mysql_query("SELECT * FROM friends WHERE username='$user' AND approve='1'") or die (mysql_error());
//Като approve 1 е одобрен приятел :)
$num = mysql_num_rows($fr2);
if($user){ //Правим проверка дали е взет потребител
//тук може да си сложиш дали има такъв потребител
        if($num){

while($fr = mysql_fetch_array($fr2)){
echo "
<br />$fr[friend]";
}


} else {
echo"Този потребител няма приятели";
}
?>
 
Аз не искам да му извадя приятелите, а приятелите, които са ни общи.

Иван е приятел с: Станчо, Мартин, Георги
Петър е приятел с: Мартин, Мария

Общ приятел на Иван и на Петър е Мария!!!!
това искам да се получи някак си.. :oops:
 
майче общият приятел е Мартин ама както и да е разбрах та като в facebook нещо ? :D
 
Проста логика:

Таблица 1:
User
1) id на потребител
2) име на потребител
и т.н.

Таблица 2:
Relation (приятелства)
1) id_1 -> id на единия потребител
2) id_2 -> id на другия потребител

Заявка:

Има двама потребители за които се търсят общи приятели:
PHP:
<?pph

$res = mysql_query("SELECT id_1, id_2 FROM Relation WHERE id_1 = 'userid' OR id_2 = 'userid' OR id_1='user2id' OR id_2='user2id'");


//немога да се сетя за др. начин
$pr = array();

while($row = mysql_fetch_array($res)) {
      $pr[] = $row;
}

$obshti = 0;
$obshti_id = array();

foreach($pr as $fr) {

      if($fr['id_1'] == $userid || $fr['id_2'] == $userid)
          foreach($pr as $fr2) {
                  if($fr2['id_1'] == $user2id || $fr2['id_2'] == $user2id) {
                          if($fr['id_1'] == $fr2['id_1'] || $fr['id_1'] == $fr2['id_2']
                               || $fr['id_2'] == $fr2['id_1'] || $fr['id_2'] == $fr2['id_2']) {
                                       if($fr['id_1']==$userid && $fr['id_2']==$user2id) continue;
                                       if($fr['id_1']==$use2rid && $fr['id_2']==$userid) continue;
                                       $obshti ++;
                                       $obshti_id = ($fr['id_1']!=$userid && $fr['id_1']!=$user2id? $fr['id_1'] :$fr['id_2']);
                          }
                  }
          }
}

echo $obshti;
print_r($obshti_id);

Пиша го в едиторчето на туриста, но би трябвало да работи. Възможно е да има синтактични грешки.

След изпълнението имаш записани броят на общите приятели($obshti) и техните id-а($obshti_id).

Надявам се да съм бил полезен.
 
Replace каза:
[sql]SELECT
f1.name, f2.name
FROM
relation_users u
LEFT JOIN
users f1 ON f1.id = u.user_id AND f1.approve = 1
LEFT JOIN
users f2 ON f2.id = u.friend_id AND f2.approve = 1
WHERE
f1.id_user = '$id'
[/sql]
Като си оправиш малко полетата, би трябвало да стане :-)

И аз не мога да се оправя.. Не знам кое, кое е :)
 

Back
Горе