2016-04-18 4 views
2

Я попытался группа с двумя столбцами:Group два столбца со значением наоборот

SELECT recipient_id, sender_id, count(*) FROM messengers WHERE recipient_id=41 OR sender_id=41 group by recipient_id, sender_id 

Выход будет, как показано ниже:

enter image description here

Как я могу объединить ряд 1 и row 2 в строке, так как recipient_id и sender_id имеют одинаковое значение, равное 40 и 41.

ответ

2

Один трюк, который вы можете использовать здесь, - GROUP BYменьше из двух столбцов ID и больше из двух столбцов ID:

SELECT LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id), COUNT(*) 
FROM messengers 
WHERE recipient_id = 41 OR sender_id = 41 
GROUP BY LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id) 
+0

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

+0

Я изменил ваш ответ на это 'SELECT * FROM (SELECT * FROM messengers ORDER BY id desc) как A WHERE recipient_id = 41 ИЛИ sender_id = 41 GROUP BY LEAST (recipient_id, sender_id), GREATEST (recipient_id, sender_id)' но у меня возникли проблемы с преобразованием в конструктор запросов Laravel. –

+0

@ Mr.Byte. Стандарт ANSI 92 требует, чтобы столбцы, которые появляются в 'SELECT', также отображаются в' GROUP BY' или являются агрегатами. Поэтому вы не должны использовать здесь 'SELECT * '. Вы можете задать новый вопрос с помощью вашей проблемы с Laravel. –

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