[MySQL] Wspólni znajomi

0

mam taką tabelę w bazie:

CREATE TABLE `friends` (
  `id` int(11) NOT NULL auto_increment,
  `user1` int(11) NOT NULL COMMENT 'id usera 1 - zapraszajacego',
  `user2` int(11) NOT NULL COMMENT 'id usera 2 - zaproszonego',
  `status` int(1) NOT NULL default '0' COMMENT '0 - niezaakceptowane, 1 - zaakceptowane',
  `data` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id` (`user1`,`user2`,`status`,`data`)
)

W tej tabeli przechowuję listę relacji ze znajomymi (user1 - mój id, user2 - id znajomego)

A tutaj mam zapytanie wyciągające wspólnych znajomych moich i znajomego:

SET @user = 2; @znajomy = 921;

SELECT 
    IF(`f1`.`user1` = @user, `f1`.`user2`, `f1`.`user1`) AS `user_id` 
FROM
    `friends` AS `f1` 
WHERE 
(`f1`.`user1` = @user OR `f1`.`user2` = @user) AND 
`f1`.`status` = 1
AND 
    IF(`f1`.`user1` = @user, `f1`.`user2`, `f1`.`user1`)
    IN (
        SELECT 
            IF(`f2`.`user1` = @user, `f2`.`user2`, `f2`.`user1`) 
        FROM 
            `friends` AS `f2` 
        WHERE 
        (`f2`.`user1` = @znajomy OR `f2`.`user2` = @znajomy) AND 
        `f2`.`status` = 1
    )
HAVING 
    `user_id` != @znajomy;

Potrzebuje pomoc w wymyśleniu jakiegoś krótszego i optymalnego zapytania. Widziałem http://forums.digitalpoint.com/showthread.php?t=590030 kilka prostych zapytań, jednak nie działają...

Proszę o pomoc, pozdrawiam

0

Czy mi się wydaje czy tu wystarczy:

select ja.user1, ja.user2, kolega.user1
from friends as ja inner join friends as kolega on ja.user2 = kolega.user2
where ja.user1 = MOJEID and kolega.user1 = IDKOLEGI

?
Czyli po prostu joinuje tabelę friends do samej siebie łącząc moich znajomych ze znajomymi mojego kolegi, używam złączenia wewnętrznego więc wszystkie rekordy które nie będą dopasowane -> będą miały NULL, nie pojawią się w wynikach.

0

Nie działa to zapytanie ... mimo, że są wspólni znajomi to i tak wyświetla, ze nie ma wyników... ;/

0

Co ci zwraca takie zapytanie?

SELECT ja.user1, ja.user2, kolega.user1
FROM friends as ja 
  inner join friends as kolega 
  on ja.user2 = kolega.user2

?
(powinno zwrócić przynajmniej rekordy dopasowane same do siebie)
I takie:

SELECT ja.user1, ja.user2, kolega.user1
FROM friends as ja 
  inner join friends as kolega 
  on ja.user2 = kolega.user2
WHERE ja.user1 != kolega.user1

1 użytkowników online, w tym zalogowanych: 0, gości: 1