Эффективное использование при определении отношений пользователя со столбцом типа - PullRequest
1 голос
/ 01 февраля 2012

вот мой первый!краткое изложение:

СЦЕНАРИЙ Я создаю приложение, в котором вы можете попросить другого пользователя сделать что-то (например, пробежать 4 мили на этой неделе, приседать на 3 тарелках и т. д.).Я больше работаю на переднем крае, поэтому у меня были некоторые проблемы с троллингом в БД, а что нет.

для дружеских отношений пользователей, я использую две строки, чтобы показать взаимность.Я прошу вас как друга, и мой идентификатор и ваш идентификатор будут занесены в таблицу отношений.как только вы примете это, будет добавлено обратное.

, когда речь идет о вызовах, но я действительно предпочел бы использовать только одну строку на вызов, а затем просто обновлять ТИП по мере развития событий.тип 0 = задание выполнено, 1 = задание принято, 2 = задание выполнено.

У меня есть еще одна таблица с информацией о каждом задании (условия, дата начала, дата окончания, вознаграждение и т. д.), поэтому каждый вызовбудет связан со строкой в ​​таблице challenge_info - еще одна причина, по которой я хотел бы / должен иметь только одну строку на вызов в таблице вызовов.

ПРОБЛЕМА теперь проблема i 'Мы пытались получить информацию о самых последних проблемах пользователя.Итак, зайдите на страницу профиля Тома, и вы увидите список его недавних действий: «Том бросил вызов Эми и выиграл! Том проиграл Джону и т. д.»

Я могу присоединиться к таблице пользователей натаблица вызовов и вызовы конкретного пользователя, только определенные типы вызовов и все такое, но я не могу найти эффективный способ получить имя пользователя, который бросил вызов этому пользователю или который был вызван этим пользователем.

TABLES

__USER__

ID  UNAME  
1   Tom  
2   John  
3   Timmy  


__CHALLENGES__  
CID    Challenger_ID    Challenged_ID      Type  
1        1                2                 0  
2        1                3                 1  
3        2                1                 2  

CLIFFS Какой самый эффективный способ определить этот тип отношений и как я могу объединить эти таблицы, напримерчто я могу найти все проблемы, в которых участвовал Том, но также получить имена и отношения (претендент или вызов) людей, с которыми он общался?

Спасибо за ваше время и внимание!

1 Ответ

1 голос
/ 01 февраля 2012

Пока Challenger_ID проиндексирован, у вас не будет проблем с использованием 2 левых соединений (я предполагаю, что USER.ID проиндексирован как PK):

select U1.uname, U2.uname from USER U1
left join CHALLENGES C on C.Challenger_ID = U1.ID
left join USER U2 on C.Challenged_ID = U2.ID

или просто используйте внутреннее соединение:

select U1.uname, U2.uname from USER U1, USER U2, CHALLENGES C
where C.Challenger_ID = U1.ID AND C.Challenged_ID = U2.ID

план выполнения будет варьироваться в зависимости от ваших индексов, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...