2012-04-27 3 views
0

Я пытаюсь создать систему, в которой есть темы и сообщения. Я пытаюсь получить поток, который является самым популярным (пользователь может нажать кнопку «как», чтобы сделать его более популярным) и имеет большинство сообщений. Проблема заключается в том, чтобы упорядочить результаты по большинству сообщений, а затем по любимым сообщениям.Результаты заказа T-Sql с count() по приоритету

Так, например, если у меня есть нить 300 сообщений и 200 подобных .. в то время как другой поток получило 300 симпатий и 201 likes..I хотят второй пост будет выбран ..

Структура таблицы в двух словах:

topic: 
-------- 
topic_id 
liked 

comment: 
------- 
comment_id 
topic_id 

Вот моя хранимая процедура до сих пор:

dbo.Trends 

AS 
    SELECT TOP 1 title, COUNT(com.topic_id), COUNT(topc.user_id_liked) 
FROM comment AS com 
INNER JOIN topic AS topc ON com.topic_id=topc.topic_id 
GROUP BY com.topic_id, topc.user_id_liked,title 
ORDER BY COUNT(com.topic_id), COUNT(topc.user_id_liked) DESC 

Я не уверен, если я прав, или я должен привести контролировать логику потока. Я помещал topic_id из таблицы тем перед тем, как понравился столбец в инструкции заказа. Ход выбора/упорядочения темы_ид будет воспринят.

ОБНОВЛЕНО: запрос обновлен.

+0

Какую версию sql-сервера вы используете? – Arion

+0

@Dmitry Makovetskiyd - Вы правы, полагая, что 'topic_id' будет иметь приоритет. Быстрый тест сказал бы вам об этом :) –

+0

Я использую визуальную студию 2010 ... Я строю хранимые процедуры. У меня нет данных. Vs2010 имеет sql express 2008 (встроенный) –

ответ

2

Я действительно не знаю, что вы хотите. Но, возможно, это поможет:

;WITH CTE 
AS 
(
    SELECT 
     COUNT(com.topic_id) OVER(PARTITION BY topc.liked) AS topicCount, 
     COUNT(com.liked) OVER(PARTITION BY topc.topic_id) AS likedCount, 
     title 
    FROM 
     commnet AS com 
     INNER JOIN topic AS topc 
      ON com.topic_id=topc.topic_id 
) 
SELECT TOP 1 
    CTE.title, 
    CTE.topicCount, 
    CTE.likedCount 
FROM 
    CTE 
ORDER BY 
    topicCount, 
    likedCount 

EDIT

Различия между GROUP BY и PARTITION BY что PARTITION BY это инлайн GROUP BY так что это не повлияет на количество строк. Мне нравится использовать это в CTE, который является встроенным. Делает это более ясным, и вы разделяете различные шаги, которые вы хотите сделать. Если вы удалите TOP 1, вы увидите, что я имею в виду.

+0

lol..that похоже, как мой статус. Я использовал группу, и вы использовали раздел by..whats разница? –

+1

Обновлен ответ. Надеюсь, он ответит на ваш вопрос – Arion

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