Главная страница
    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.45 MB
Время: 0.034 c
2-1232693950
И. Павел
2009-01-23 09:59
2009.03.15
Как скопировать TADOQuery


2-1233054476
Merry
2009-01-27 14:07
2009.03.15
операции с датами


2-1232932287
Тимоха
2009-01-26 04:11
2009.03.15
перехват сообщения "восстановить"


15-1231397112
@!!ex
2009-01-08 09:45
2009.03.15
Разработка софта на заказ какой код в ОКВЭД имеет?


2-1232712216
ников
2009-01-23 15:03
2009.03.15
проверка наличияя шрифта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский