2015-04-07 3 views
-1

У меня есть 2 таблицы: код и code_likeзаказ MYSQL столбцом из другой таблицы количество строк

кодовая таблица

code_id | code_name 
--------------- 
1  | pagination 
2  | function 
3  | script 

code_like стол

like_id | code_id(id of code table) 
1  | 3 
2  | 1 
3  | 3 
4  | 2 
5  | 1 
6  | 3 

Я хочу, чтобы отсортировать code table по строкам кол-во code_like Таблица

Пример:

I want result like 
(1) script  (1st because 3 times in code_like table) 
(2) pagination (2nd because 2 times in code_like table) 
(3) function (3rd because 1 time in code_like table) 
+0

Первичные ключи двух таблиц не имеют одинакового имени. Идентифицируйте идентификатор как c_id в таблице code_like. – user3386779

ответ

2

Используйте объединение и порядок по количеству коды любит

select c.* 
from code c 
left join code_like l on c.id = l.code_id 
group by c.id 
order by count(*) desc 

DEMO

2

Здесь нужна COUNT, JOIN и GROUP BY

SELECT c.code_name, count(*) AS rowcount 
FROM code c LEFT JOIN code_like l ON l.code_id = c.id 
GROUP BY c.id 
ORDER BY rowcount DESC 

sqlfiddle

+0

Добавил sqlfiddle к ответу – user4035

0

Вы можете попробовать это:

SELECT * 
, (SELECT COUNT(*) FROM code_like WHERE code_like.code_id = code.id) AS like 
FROM code 
ORDER BY (SELECT COUNT(*) FROM code_like WHERE code_like.code_id = code.id) DESC 

ИЛИ

SELECT * FROM (SELECT * 
, (SELECT COUNT(*) FROM code_like WHERE code_like.code_id = code.id) AS like 
FROM code 
) AS code_was_like 
ORDER BY like DESC 

Я надеюсь, что это поможет.

+0

В вашем ответе нет порядка – user4035

+0

tq @ user4035 для напоминания мне – starplateena

0
SELECT c . * 
FROM code AS c 
INNER JOIN code_like AS cl ON cl.code_id = c.id 
GROUP BY c.id 
ORDER BY COUNT(cl.code_id) DESC 
Смежные вопросы