SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.12.2011 19:58:24

walik
Участник
Зарегистрирован: 05.10.2011
Сообщений: 17

Положение записи отсортированной по полю

К примеру есть таблица "sales"
id    rank   price
--- ------ ------
1      1       10
2      5       15
3      2       11
4      4       9
5      5       17
6      2       11
7      7       15

Я делаю выборку из это таблицы, мне нужно так же получить положение записи в списке сортируя по полю rank

То есть для записи с ID=6 положение будет 3
А для записи с ID=5 положение будет 6

Если получать таким запросом к примеру:

SELECT
   count(`id`)+1
FROM
   `sales`
WHERE
   `rank` <= 2


То для записей с одинаковым `rank` будет одинаковая и позиция, а мне нужно что бы позиция была разная (то есть если `rank` одинаковый то что бы сортировал тогда по  ID к примеру),  как можно такое реализовать.

Вообще выборка у меня происходит примерно так:
SELECT
   *
FROM
   `sales`
ORDER BY
   `price`


а потом уже циклом проходя по всем записям, определяю ее позицию (запрос выше), может как то в одном запросе можно все получить ?

Упс, случайно не в тот раздел запостил

Отредактированно walik (22.12.2011 20:02:01)

Неактивен

 

#2 22.12.2011 20:12:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Положение записи отсортированной по полю

select t1.*, @i := @i + 1 AS number from
(SELECT .. FROM `sales` ORDER BY `rank`,id) t1, (select @i:=0) t2

Неактивен

 

#3 22.12.2011 20:26:17

walik
Участник
Зарегистрирован: 05.10.2011
Сообщений: 17

Re: Положение записи отсортированной по полю

vasya,
Спасибо, но насколько я понимаю тут number равен номеру записи в выборке,  то есть если мне выборку нужно отсортировать по полю price, то number уже будет не правильным.
То есть как я показывал, что в основном выборка у меня идет по полю `price`

Неактивен

 

#4 22.12.2011 20:39:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Положение записи отсортированной по полю

ну так отсортируйте ещё и по прайс либо сразу, либо после присвоения number в зависимости от того, что вам нужно.

Неактивен

 

#5 22.12.2011 20:44:25

walik
Участник
Зарегистрирован: 05.10.2011
Сообщений: 17

Re: Положение записи отсортированной по полю

То есть отсортировать еще и по прайс ?
Так ?

select t1.*, @i := @i + 1 AS number from
(SELECT .. FROM `sales` ORDER BY `rank`,id) t1, (select @i:=0) t2 ORDER BY `price`

но в таком случае как я и говорил number будет равен просто номеру записи в выборке не в зависимости от поля rank.


Пока что пытался еще такой запрос сделать:

SELECT
    t1.*,
    (
    SELECT
        count(t2.id)+1
    FROM
        `sales` AS t2
    WHERE
        t2.rank <= t1.rank
    AND
        t2.id != t1.id
    ORDER BY
        t2.rank, t2.id
    ) AS `number`
FROM
    `sales` AS t1
ORDER BY
    `price`
 

но проблема та же, у одинаковых rank одинаковый и number,  и не могу понять почему.

Неактивен

 

#6 22.12.2011 20:55:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Положение записи отсортированной по полю

select * from (
select t1.*, @i := @i + 1 AS number from
(SELECT .. FROM `sales` ORDER BY `rank`,id) t1, (select @i:=0) t2) t3 order by `price`;


или

select t1.*, @i := @i + 1 AS number from
(SELECT .. FROM `sales` ORDER BY `price`,`rank`,id) t1, (select @i:=0) t2


в зависимости от того, что вы хотите получить.

Неактивен

 

#7 22.12.2011 20:59:48

walik
Участник
Зарегистрирован: 05.10.2011
Сообщений: 17

Re: Положение записи отсортированной по полю

Первый запрос,  то что надо,   пасиба огромное))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson