2014-11-17 2 views
1

У меня есть таблица msg какЗаказать MySQL по количеству строк

msg_id|from|to|msg| 

Теперь я хочу, чтобы выбрать все msg_id, которого я больше всего Сообщ с.

например. Если я хочу, чтобы выбрать мои верхние 2 гонцов в порядке по убыванию (я с ид = 2)

msg_id|from|to|msg| 
1  2 3 Hi 
2  2 3 Hi 
3  2 4 Hi 
4  3 2 Hi 
5  3 4 Hi 
6  4 2 Hi 
7  3 2 Hi 
8  1 2 Hi 
9  2 4 Hi 
10  3 2 Hi 

Запрос даст мне

3 (так как общее сообщ = 5)

4 (так как общая тзд = 4)

+0

Вы можете сгруппировать по совокупности функций –

ответ

2

Если я правильно понимаю ваш вопрос, вам необходимо использовать UNION ALL, чтобы объединить столбцы to и from (так как они могут содержать идентификатор, который вы ищете). Тогда вы можете заказать по COUNT убыванию:

select id 
from (
    select `to` id, `from` contact 
    from msg 
    union all 
    select `from`, `to` 
    from msg 
) t 
where contact = 2 
group by id 
order by count(1) desc 
limit 2 
+0

Это работает благодаря –

0

Вы могли бы попробовать что-то вроде этого ..

SELECT COUNT (к) AS NUM FROM сбщ GROUP BY на ORDER BY num LIMIT 2;

Я не уверен на 100%, если это точный формат, так как мне нечего тестировать. Однако он должен дать вам приблизительный ответ (синтаксические ошибки в сторону).

+0

и что, если '' в' является другой user', который посылает сбщ –

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