MySQL, нахождение позиции в таблице

Discussion in 'PHP' started by NNNS, 4 Nov 2007.

  1. NNNS

    NNNS Elder - Старейшина

    Joined:
    26 May 2007
    Messages:
    44
    Likes Received:
    28
    Reputations:
    -5
    Есть таблица в бд
    id | count
    Нужно найти позицию id в отсортированной по убыванию count таблице. Помогите сформировать запрос
     
  2. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    Если я тебя правильно понял: :)
    select id from (твоя таблица) where count='коунт id которого ищеш'
    Или уточни что тебе нужно.
     
    1 person likes this.
  3. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    нет скорее ты неправельно понял...

    а я понял так, вот запрос:

    это отсорировано по убыванию
    SELECT count(id) FROM `count` where id>=твой ид

    это отсорировано по возрастанию
    SELECT count(id) FROM `count` where id<=твой ид
     
    1 person likes this.
  4. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Code:
    SELECT COUNT(`id`) FROM `tbl` WHERE `count` > (SELECT `count` FROM `tbl` WHERE `id` = '12321')
    
    12321 - искомый id

    Получишь количество элементов, count которых больше count искомого, т.е. по сути - номер в отсортированной таблице; индексация с 0.
     
    2 people like this.
  5. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    да, я сначала не посмотрел, что он дал "структуру" таблицы, просто он еще написал непонятно, вот я и тупанул в конечном итоге я думаю правильным будет вариант Helios`a правдо надо немного подправить его:
    SELECT COUNT(`id`) FROM `tbl` WHERE `count` >=(SELECT `count` FROM `tbl` WHERE `id` =твой ид ) order by count desc
     
    #5 Scipio, 4 Nov 2007
    Last edited: 5 Nov 2007
  6. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    >>Нужно найти позицию id в отсортированной по убыванию count таблице. Помогите сформировать запрос
    наверноеб имелось ввиду:

    >>select id from table order by count desc limit n,1

    где, n - нужный номер
     
    1 person likes this.
  7. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    В твоем случае на выходе будет id, а не позиция id, т.к. значения id могут идти не попорядку, т.е. не
    I1=1, I2=2....In=In-1+1

    но если даже это выполняется, то взяв твой вариант, n- это и есть то число которое нужно найти, а у тебя n нужно вводить вручную (т.е. знать заранее)

    Я думаю предложенный Helius`ом и доработанный мной вариант как раз удовлетворяет условию этой "задачи"
     
    #7 Scipio, 5 Nov 2007
    Last edited: 5 Nov 2007
  8. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2Scipio возможно ошибся, я имел ввиду что именно id нужно вывести. но если нужна позиция, тогда в чем вопрос и причем здесь вообще count?) ну, а если по count надо искать, то уже написали)

    >>Я думаю предложенный Helius`ом и доработанный мной вариант

    только там count вместо id в условии выборки:)
     
    #8 ZaCo, 5 Nov 2007
    Last edited: 5 Nov 2007
    1 person likes this.
  9. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Сотрировка
    Code:
    SELECT COUNT(`id`) FROM `tbl` WHERE `count` >=(SELECT `count` FROM `tbl` WHERE `id` =твой ид ) [B]ORDER BY `count` DESC[/B]
    
    там нафик не нужна, т.к. результатом запроса будет не значение какого-то поля, а результат работы встроенной функции COUNT(), которой глубоко безразлично то, в каком порядке идут данные, которые она считает. Только лишняя трата времени, а если записей много - ...
     
    #9 Helios, 5 Nov 2007
    Last edited: 5 Nov 2007
  10. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    да, ты прав, тогда все дело в >= и <= (т.е. в порядке убывания возрастания соответственно)
     
Loading...