2016-02-13 2 views
-1

У меня есть две таблицы, одна для записей изображений (сообщений), а другая для альбомов подобных записей. Поэтому я сделал INNER JOIN из одной таблицы в другую, потому что мне нужно было выбрать изображение и количество понравившихся ему изображений. но я также должен заказать их по количеству подобных, так что я могу сделать топ 10 самых проголосовавших изображений на сайте, так вот мой вопрос:SQL - MySql Выберите топ-10 должностей, упорядоченных по количеству голосов

SELECT 
    COUNT(DISTINCT B.votes), 
    A.id_image, 
    A.image, 
    A.title 
FROM likes_images AS B INNER JOIN images AS A ON A.id_image = B.id_image 
GROUP BY A.title 
ORDER BY COUNT(DISTINCT B.votes) ASC 
LIMIT 10 

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

Любые идеи?

+1

Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, предоставьте правильные инструкции CREATE и INSERT (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему , 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

ответ

0

В большинстве реализаций SQL, GROUP BY criterionподразумевает любого ORDER BY положения игнорируются в пользу criterion.

Таким образом, вы можете попробовать это:

SELECT L.id_image, A.image, A.title, 
    * FROM (
    SELECT COUNT(votes) AS likes, id_image 
    FROM likes_images 
    GROUP BY id_image 
) AS L 
JOIN images B ON B.id_image = L.id_image 
ORDER BY L.likes DESC 
LIMIT 10 

Обратите внимание, что я установил ORDER BY к DESC (так как вы хотите top10 я не понимаю, что вы выбрали ASC)!

+0

Большое вам спасибо! Это полностью сработало! – Kevin

+0

@ Kevin Glad! Так можете ли вы подумать о принятии моего ответа? ТИА – cFreed

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