2015-02-09 2 views
0

Я работаю над системой Stackoverflow для моего школьного проекта на ASPX. Я уже далеко от того, что учитель нас считал, поэтому я решил использовать глупый способ подсчета голосов и upvotes - наличие пространственной таблицы для каждого голосования.Как заказать другой стол?

Вот оба моих таблиц:

comments 
    id | content | by | bestanswer 
    1 | demo | Vlad | 0 
    2 | sample | Hagay | 1 
    3 | chacking| Gil | 0 
    4 | trying | Teddy | 0 
    ...| ...  | ... | ... 
votes 
    postid | username | upvote 
    1  | Gil  | 1 
    1  | Hagay | 1 
    1  | Teddy | -1 
    2  | Gil  | -1 
    3  | Vlad  | -1 
    2  | Gil  | 1 
    ... | ...  | ... 

Как можно, используя SQL, выберите все и установить один с bestanswer=1 как первый, а затем порядке по суммой в upvotes (2, 1, 3)?

+0

Столбец с именем upvote с -1 значениями вдохновляет меня на комплимент вам по вашему выбору прилагательных. –

+0

Как связаны эти две таблицы? Является Комментарии.ID = к Votes.PostID? Чтобы уточнить, хотите ли вы выбрать все поля в таблице «Комментарии» или все поля из обеих таблиц? – mmarie

+0

@mmarie Да, я хочу, чтобы он упорядочивался, подсчитывая upvoted (если это плюс, так что добавьте, если это минус, так уменьшите) во всех кулонах в таблице «голосов» с сообщением id кулона в комментариях – GINCHER

ответ

3

Вы можете агрегировать «upvotes» в подзапроса, то JOIN к этой таблице для заказа:

SELECT c.*,v.upvotes 
FROM comments c 
LEFT JOIN (SELECT postid,SUM(upvote) as upvotes 
      FROM votes 
      GROUP BY postid 
      ) v 
    ON c.id = v.postid 
ORDER BY c.bestanswer DESC, upvotes DESC 

Я предполагаю, что id и postid связаны друг с другом, и что вы хотите вернуть все поля из таблицы comments и, возможно, общее количество голосов.

+0

И если я хочу добавить 'WHERE', я просто добавляю его как базовый SQL SELECT перед' LEFT JOIN'? – GINCHER

+1

'WHERE' идет прямо над' ORDER BY', если вы не пытаетесь отфильтровать голоса, которые вы подсчитали, и в этом случае он идет до 'GROUP BY' –

+0

. Но если в комментарии нет голосов, тогда ему нужно быть между пропущенными проголосовавшими комментариями и проголосовавшими комментариями, но он показывает их внизу. – GINCHER

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