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