MySQL: концептуальный порядок позиций - PullRequest
1 голос
/ 02 мая 2011

используя MySQL Мне нужно заполнить столбец с позицией в списке, используя ORDER BY.

Я видел этот пост: MySQL-получить строку-позиции-в-порядке-по

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

Допустим, у меня есть такой список:

* * 1010

Я хотел бы получить упорядоченный вывод со столбцом позиции, подобным этому:

   id   val        pos
    E    1          1
    C    2          2
    G    2          2
    A    3          3
    B    5          4
    D    6          5
    H    6          5 
    F    8          6

Ответы [ 2 ]

1 голос
/ 02 мая 2011
select id,val,
@pos := if(@prev<>val,@pos+1,@pos) as pos,
@prev := val as val
from table,(select @pos:=0,@prev:='') as r order by val 

Я согласен с другими советами, что было бы лучше сделать это на уровне приложения.

1 голос
/ 02 мая 2011

Что по этому поводу:

  SELECT `id`,
         (SELECT COUNT(DISTINCT `val`) + 1
            FROM `table`
           WHERE `val` < `outer`.`val`) AS `pos`,
         `val`
    FROM `table` `outer`
ORDER BY `val`

Просто взял мой ответ из этой ветки и немного его изменил.

Но, как @reko_t упоминается в комментариях, я лично голосую за то, чтобы делать это на языке программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...