![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом (бд MySQL)
Dmitry S © (2008-07-21 01:39:00)Есть таблица. Ключевое поле 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... где field*X- это результат выполнения запроса в пункте 2.
(`field1`< field1X) or (`field1`= field1Xand `field2`> field2X) or (`field1`= field1Xand `field2`= field2Xand `field3`> field3X)
4. На основе количества строк лежащих "выше" данной расчитать позицию текущей.
У кого-нибудь есть варианты по-проще?
Dmitry S (2008-07-21 15:52:00) [1]Спасибо! Отличная идея!
sniknik (2008-07-21 11:01:00) [2]
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 10:43:00) [3]Так это понятно. Несложный расчет и разбиение по страницам.
Вобщем задача такая. Пользователь добавляет строку в таблицу. После вставки необходимо показать ту страницу, на которой данная строка появилась. При определенных сортировках новая строка может быть как в начале или конце таблицы, так и в середине.
Вот отсюда и более конкретная задача: имеется 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 10:23:00) [4]сделает вот это
> Таблица выводится пользователю постранично по K элементов на страницу.
выделит то что на странице.
Dmitry S (2008-07-21 09:37:00) [5]
> sniknik ©
А чем Лимит в данной ситуации поможет?
sniknik (2008-07-21 08:30:00) [6]LIMIT