SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.01.2011 16:25:25

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Выбор общих друзей

Таблица друзей:

Код:

CREATE TABLE `friends` (
  `user1` int(10) unsigned NOT NULL default '0',
  `user2` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`user1`,`user2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

В поле user1 - находится меньший id юзеров, в user2 - больший id юзеров.

Как выбрать общих друзей у 2х юзеров?

Неактивен

 

#2 09.01.2011 16:40:07

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Re: Выбор общих друзей

Использование такого запроса на сколько верно?

Код:

SELECT
    `users`.`id`,
    `users`.`username`,
    `users`.`avatar`
FROM (
    SELECT
        IF (`user1` != 3, `user1`, `user2`) as `uid`
    FROM `friends`
    WHERE (
        `user1` IN (
            SELECT IF (`user1` != 1, `user1`, `user2`) as `uid`
            FROM `friends`
            WHERE
                `user1` = 1
                OR `user2` = 1
        ) AND `user2` = 3
    ) OR (
        `user2` IN (
            SELECT IF (`user1` != 1, `user1`, `user2`) as `uid`
            FROM `friends`
            WHERE
                `user1` = 1
                OR `user2` = 1
        ) AND `user1` = 3
    )
) AS `common_friends`
JOIN `users`
    ON `users`.`id` = `common_friends`.`uid`

Отредактированно maxtor (09.01.2011 16:40:37)

Неактивен

 

#3 09.01.2011 18:35:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбор общих друзей

select user2, count(user2) c from
(select user2 from friends where user1=id1
union all
select user2 from friends where user1=id2) t group by user2 having c=2;

Неактивен

 

#4 31.01.2011 16:54:55

maxtor
Участник
Зарегистрирован: 21.07.2010
Сообщений: 20

Re: Выбор общих друзей

Имеем такие данные:

Код:

INSERT INTO `friends` (`user1`, `user2`) VALUES 
(1, 2),
(2, 3);

У пользователей 1 и 3, как видно, есть общий друг 2. Но выше приведенный запрос его не находит...

Неактивен

 

#5 31.01.2011 17:10:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбор общих друзей

select user2, count(user2) c from
(select user2 from friends where user1=id1 or user2=id1
union all
select user2 from friends where user1=id2 or user2=id2) t group by user2 having c=2;

Неактивен

 

#6 26.01.2012 16:31:37

Feqan
Участник
Зарегистрирован: 26.01.2012
Сообщений: 1

Re: Выбор общих друзей

privet. a mojete li obyasnit eti kodi:
union,
having,
SELECT IF (`user1` != 1, `user1`, `user2`),
JOIN
  ON `users`.`id` = `common_friends`.`uid`   (common_friends i on)
.podrobneye pojalusta

Неактивен

 

#7 26.01.2012 16:41:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выбор общих друзей

Привет.
1. Правила, п.1.
2. Не поднимайте старой темы, вы же правда не собираетесь ее обсуждать?
3. Начните таки с чтения документации, там все эти слова есть.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson