Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.03.15;
Скачать: [xml.tar.bz2];

Вниз

Помогите с запросом (бд 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.078 c
15-1231158936
ВованХ
2009-01-05 15:35
2009.03.15
Как установить компоненты DevExpress в VCL


15-1232060933
Григорий
2009-01-16 02:08
2009.03.15
Вопрос: Передача данных приложению


2-1232537796
fenix96
2009-01-21 14:36
2009.03.15
вывод в StringGrid


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


15-1231939526
KSergey
2009-01-14 16:25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский