Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   MySQL, нахождение позиции в таблице (https://forum.antichat.xyz/showthread.php?t=52781)

NNNS 04.11.2007 17:41

MySQL, нахождение позиции в таблице
 
Есть таблица в бд
id | count
Нужно найти позицию id в отсортированной по убыванию count таблице. Помогите сформировать запрос

Red_Red1 04.11.2007 19:50

Если я тебя правильно понял: :)
select id from (твоя таблица) where count='коунт id которого ищеш'
Или уточни что тебе нужно.

Scipio 04.11.2007 20:39

Цитата:

Сообщение от Red_Red1
Если я тебя правильно понял: :)
select id from (твоя таблица) where count='коунт id которого ищеш'
Или уточни что тебе нужно.

нет скорее ты неправельно понял...

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

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

это отсорировано по возрастанию
SELECT count(id) FROM `count` where id<=твой ид

Helios 04.11.2007 23:06

Код:

SELECT COUNT(`id`) FROM `tbl` WHERE `count` > (SELECT `count` FROM `tbl` WHERE `id` = '12321')
12321 - искомый id

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

Scipio 04.11.2007 23:24

Цитата:

Сообщение от Helios
Код:

SELECT COUNT(`id`) FROM `tbl` WHERE `count` > (SELECT `count` FROM `tbl` WHERE `id` = '12321')
12321 - искомый id

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

да, я сначала не посмотрел, что он дал "структуру" таблицы, просто он еще написал непонятно, вот я и тупанул в конечном итоге я думаю правильным будет вариант Helios`a правдо надо немного подправить его:
SELECT COUNT(`id`) FROM `tbl` WHERE `count` >=(SELECT `count` FROM `tbl` WHERE `id` =твой ид ) order by count desc

ZaCo 05.11.2007 00:23

>>Нужно найти позицию id в отсортированной по убыванию count таблице. Помогите сформировать запрос
наверноеб имелось ввиду:

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

где, n - нужный номер

Scipio 05.11.2007 01:26

Цитата:

Сообщение от ZaCo
>>Нужно найти позицию id в отсортированной по убыванию count таблице. Помогите сформировать запрос
наверноеб имелось ввиду:

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

где, n - нужный номер

В твоем случае на выходе будет id, а не позиция id, т.к. значения id могут идти не попорядку, т.е. не
I1=1, I2=2....In=In-1+1

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

Я думаю предложенный Helius`ом и доработанный мной вариант как раз удовлетворяет условию этой "задачи"

ZaCo 05.11.2007 01:42

2Scipio возможно ошибся, я имел ввиду что именно id нужно вывести. но если нужна позиция, тогда в чем вопрос и причем здесь вообще count?) ну, а если по count надо искать, то уже написали)

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

только там count вместо id в условии выборки:)

Helios 05.11.2007 03:19

Сотрировка
Код:

SELECT COUNT(`id`) FROM `tbl` WHERE `count` >=(SELECT `count` FROM `tbl` WHERE `id` =твой ид ) ORDER BY `count` DESC
там нафик не нужна, т.к. результатом запроса будет не значение какого-то поля, а результат работы встроенной функции COUNT(), которой глубоко безразлично то, в каком порядке идут данные, которые она считает. Только лишняя трата времени, а если записей много - ...

Scipio 05.11.2007 03:34

Цитата:

Сообщение от Helios
Сотрировка
Код:

SELECT COUNT(`id`) FROM `tbl` WHERE `count` >=(SELECT `count` FROM `tbl` WHERE `id` =твой ид ) ORDER BY `count` DESC
там нафик не нужна, т.к. результатом запроса будет не значение какого-то поля, а результат работы встроенной функции COUNT(), которой глубоко безразлично то, в каком порядке идут данные, которые она считает. Только лишняя трата времени, а если записей много - ...

да, ты прав, тогда все дело в >= и <= (т.е. в порядке убывания возрастания соответственно)


Время: 02:43