Сложный? MySQL Join SELECT запрос - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь получить список «контактов» для указанного идентификатора пользователя. Пусть говорит, что мой идентификатор пользователя равен 1, мне нужно получить список идентификаторов моих контактов из chat-contactlist , а затем получить всю информацию для каждого идентификатора.

Идентификатор, имя и контактная информация всех пользователей

Таблица usr: uid, rname, номер телефона

Онлайн статус и другие вещи

Настольный чат-usr: uid, ник, online_status

Содержит идентификатор пользователя и идентификатор каждого контакта этого пользователя:

Настольный чат-список контактов: uid, cid (cid = ID человека, который входит в список пользователей "uid"

Так что мне нужно имя, псевдоним, online_status для всех 'cid' для указанного 'uid' ... Не знаю, я читал учебник о левом соединении, но он сложен для объединения нескольких таблиц, любой хочет попробовать ? Любая рекомендация?

Спасибо

EDIT

Изменение имени на rname, потому что имя является зарезервированным словом для SQL.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Это объединение из трех таблиц, в котором отношение «многие ко многим» определяется таблицей компоновщиков chat-contactlist:

SELECT u.name username, c.nickname chat_username, c.online_status
FROM chat-contactlist cc
    JOIN usr u ON (u.uid = cc.uid)
    JOIN chat-usr c ON (c.uid = cc.cid);

Это явное соединение. Если вы хотите выбрать конкретного пользователя, вы добавите это в WHERE предложениях позже.

SELECT u.name username, c.nickname chat_username, c.online_status
FROM usr u, chat-usr c, chat-contactlist cc
WHERE cc.uid = u.uid
AND cc.cid = c.uid;

Это неявное соединение, в котором таблицы связаны равенством в операторах WHERE. Использовать не рекомендуется, но иногда их легче читать.

Дополнительная информация:

2 голосов
/ 27 января 2012
SELECT  ccl.uid, 
        Name            = u.Name,
        Nickname        = cu.nickname,
        OnlineStatus    = cu.onlinestatus
FROM    chat-contactlist ccl
        JOIN chat-usr cu ON ccl.cid = cu.uid
        JOIN usr u       ON u.uid   = cu.uid
Where   ccl.uid = @uid /* your filter here */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...