2015-04-11 3 views
0

У меня есть следующая таблица для представления разговора между пользователями.Группа по другим комбинациям

message | user1 | user2 | unixtime 
msg1 | 14 | 21 | - 
msg2 | 21 | 12 | - 
msg1 | 14 | 18 | - 
msg3 | 14 | 21 | - 
msg2 | 18 | 14 | - 
msg4 | 21 | 12 | - 

Я хочу, чтобы показать список из разговоров конкретного пользователя, выбрав все сообщения с current_user = user1 или user2. Пока этот SELECT выберет правильные сообщения, но группировка работает неправильно.

SELECT * FROM (
    SELECT * FROM messages 
    WHERE user1 = '".$_SESSION['login']['ID']."' 
    OR user2 = '".$_SESSION['login']['ID']."' 
    ORDER BY unixtime DESC 
) as list 
GROUP BY user1, user2 
ORDER BY unixtime DESC 

Он будет группировать сообщения только с одним и тем же пользователем1 и пользователем2, а не если оба пользователя будут отменены. Выполняется ли это более сложной группировкой или мне нужно каким-то образом присоединиться к таблице?

+0

можно сгруппировать по МИНИМУМ (user1, user2), БОЛЬШОЕ (user1, user2), но то, что вы пытаетесь сделать? вы выбираете все столбцы * и группируете всего два столбца. – fthiella

ответ

2

Непонятно, что вы хотите сделать, потому что используете group by и select *. select * возвращает неопределенные значения из совпадающих строк. Я не знаю, почему кто-то захочет это сделать. Вы можете прочитать об этом в documentation.

Если вы хотите отсчитывает сообщения:

SELECT least(user1, user2), greatest(user1, user2), count(*) 
FROM messages 
WHERE '".$_SESSION['login']['ID']."' in (user1, user2) 
GROUP BY least(user1, user2), greatest(user1, user2) 
+0

Добавляя наименьший (user1, user2), наибольший (user1, user2) в мою GROUP BY выполнил работу - спасибо! Я хочу показать все сообщения, вот почему *, но, возможно, мне стоит вернуться к этому – Christoffer

Смежные вопросы