MySQL получить номер строки конкретного результата - PullRequest
0 голосов
/ 12 февраля 2012

Мой сайт позволяет пользователям записывать ставки. Каждая ставка сохраняется индивидуально и связана с идентификатором пользователя. У пользователя может быть много ставок, которые используются для добавления одной общей ставки, отображаемой на сайте.

То, что я пытаюсь сделать в sql, это вернуть позицию, в которой общая ставка для пользователей была получена из набора результатов.

Я использую sql ниже, но проблемы возникают, когда я использую группу по команде - кажется, что порядок возвращается к порядку дБ по умолчанию, а не к сумме ставок пользователей:

SET @rowcount = 0;
SELECT rowCount, userId FROM (
    SELECT userId, @rowcount := @rowcount + 1 as rowCount, sum(amount) as amount FROM bids group by userId order by amount desc
 ) t when product = xxxxx

оцените, если кто-нибудь знает, возможно ли это?

Ответы [ 3 ]

1 голос
/ 12 февраля 2012

Вам нужно убрать приращение количества строк из подзапроса.И поместите ваше условие WHERE внутрь, иначе ваш подзапрос будет суммировать ставки по всем продуктам для данного пользователя.

SET @rowcount = 0;
SELECT @rowCount:=@rowcount+1 as rowcount, userId, amount FROM 
 (
    SELECT userId, sum(amount) as amount 
    FROM bids 
    WHERE product = xxxxx 
    GROUP BY userId 
    ORDER BY amount DESC
 ) t 
0 голосов
/ 12 февраля 2012

если я правильно понимаю, вы можете попробовать что-то вроде этого:

SELECT @rownum:=@rownum+1 ‘rank’, userId FROM (SELECT product, userId, sum(amount) AS amount FROM bids GROUP BY userId) t, (SELECT @rownum:=0) r WHERE t.product = xxxx ORDER BY t.amount DESC;
0 голосов
/ 12 февраля 2012

Вы уже пробовали?

SET @rowcount = 0;
SELECT rowCount, userId FROM (
    SELECT userId, @rowcount := @rowcount + 1 as rowCount from 
     (select sum(amount) as amount, userId FROM bids group by userId) s
     order by s.amount desc
 ) t where product = xxxxx
...