2017-01-21 5 views
1

У меня есть одна таблица чата, в пользовательской таблице используется идентификатор пользователя таблицы user_from и user_to. Теперь у меня есть запрос для получения списка членов чата из чата, например, списка facebook caht. , с кем я общаться, и я должен найти имя пользователя из таблицы пользователя и непрочитанного счетчика enter image description hereКак получить последние данные с использованием двух соединений

Пожалуйста, дайте мне решение для этого Спасибо

ответ

0

Я думаю, ваш подзапрос должен быть соотнесен, который будет медленный.

Используйте JOIN вместо этого.

SELECT 
    users.id AS userid, 
    chat_box.id AS msgid, 
    first_name, 
    last_name, 
    profile_pic, 
    LEFT(message, 50) AS message, 
    u.unreadcounter 
FROM 
    chat_box 
     LEFT JOIN 
    users ON (chat_box.user_from = users.id) 
     LEFT JOIN 
    (SELECT 
     u.id, COUNT(c.id) unreadcounter 
    FROM 
     chat_box c 
    JOIN users u ON (c.user_from = u.id) 
    WHERE 
     c.read = 0 && c.user_to = 45 
    GROUP BY u.id) u ON users.id = u.id 
WHERE 
    (user_from = 45 OR user_to = 45) 
     && users.id != 45 
GROUP BY users.id 
UNION SELECT 
    users.id AS userid, 
    chat.id AS msgid, 
    first_name, 
    last_name, 
    profile_pic, 
    LEFT(message, 50) AS message, 
    0 AS unreadcounter 
FROM 
    chat_box AS chat 
     LEFT JOIN 
    users ON (chat.user_to = users.id) 
WHERE 
    (user_from = 45 OR user_to = 45) 
     && users.id != 45 
GROUP BY users.id 
ORDER BY msgid DESC 
+0

Благодарности #Gurv Его работает отлично, как я хочу, но я хочу, чтобы получить уникальные данные – mishraoft

+0

Пожалуйста, после некоторых выборочных данных и ожидаемых результатов (текстовой форме или лучше ссылку на SQLFiddle.com) в вопросе ... – GurV

+0

@mishraoft - это не повторяется. msgstr, сообщение и т. д. имеют разные значения – GurV