Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Помогите с запросом (бд MySQL)   Найти похожие ветки 

 
Dmitry S ©   (2008-07-21 01:39) [0]

Есть таблица. Ключевое поле id.

Задан порядок сортировки строкой ORDER BY `field1` ASC, `field2` DESC, ... и так далее. Вобщем это значение зависит от пользователя. Какую он сортировку или комбинацию сортировок выберет - такая строка и будет.

Таблица выводится пользователю постранично по K элементов на страницу.

Необходимо построить такой запрос, чтобы можно было установить на какой странице будет строка с id=X в таблице с заданной сортировкой?

Пока мне в голову приходит такая мысль:
1. Распарсить строку сортировки. Установить какие поля в ней использутся.
2. Выполнить запрос:
SELECT `field1`, `field2`, ... FROM `sometable` WHERE `id`=X
3. Выполнить запрос:
SELECT COUNT(*) FROM `sometable` WHERE
 (`field1`<field1X) or (`field1`=field1X and `field2`>field2X ) or (`field1`=field1X and `field2`=field2X and `field3`>field3X )
... где field*X - это результат выполнения запроса в пункте 2.
4. На основе количества строк лежащих "выше" данной расчитать позицию текущей.

У кого-нибудь есть варианты по-проще?


 
sniknik ©   (2008-07-21 08:30) [1]

LIMIT


 
Dmitry S ©   (2008-07-21 09:37) [2]


> sniknik ©

А чем Лимит в данной ситуации поможет?


 
sniknik ©   (2008-07-21 10:23) [3]

сделает вот это
> Таблица выводится пользователю постранично по K элементов на страницу.
выделит то что на странице.


 
Dmitry S ©   (2008-07-21 10:43) [4]

Так это понятно. Несложный расчет и разбиение по страницам.

Вобщем задача такая. Пользователь добавляет строку в таблицу. После вставки необходимо показать ту страницу, на которой данная строка появилась. При определенных сортировках новая строка может быть как в начале или конце таблицы, так и в середине.

Вот отсюда и более конкретная задача: имеется id, нужно определить такие, грубо говоря, A и B, чтобы запрос
SELECT * FROM `sometable` ORDER BY `field1` ASC, `field2` DESC, ... LIMIT A, B
содержал в себе данную строку (с имеющимся id).
Причем B - это количество строк на странице, а А - кратна B (A mod B = 0).


 
sniknik ©   (2008-07-21 11:01) [5]

SET @recNo:=0;
SELECT @recNo:=n FROM (
SELECT @recNo:=@recNo+1 n, id FROM t ORDER BY `field1` ...) s
WHERE id=9;

вот это говорят в mysql работает для получения номера позиции в выборке, получить следующим запросом в пакете блок с LIMIT A, B где @recNo >=A and @recNo < B дело техники.


 
Dmitry S ©   (2008-07-21 15:52) [6]

Спасибо! Отличная идея!



Страницы: 1 вся ветка

Текущий архив: 2009.03.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
6-1200673788
Михаил (Питер)
2008-01-18 19:29
2009.03.15
ICMP запросы и перевод сетевой карты в режим прослушивания


3-1216004585
Viod
2008-07-14 07:03
2009.03.15
Вернуть значение поля внутри хранимой процедуры


15-1231149171
***mikle***
2009-01-05 12:52
2009.03.15
Какую среду вы используете?


2-1232991875
cruiser
2009-01-26 20:44
2009.03.15
idHTTP и прокси-сервер


8-1192292701
Dmitry_12_08_73
2007-10-13 20:25
2009.03.15
Графические компоненты