Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Как вытащить 2-а предыдущих элемента


Автор: StreetPeople 16.9.2008, 09:51
Встала задача написать левое меню, как на картинке, для интернет-магазина.

Когда мы находимся в каком-то каталоге мы должны видеть все товары, которые находятся в нём, а также целый список каталогов, которые находятся на уровне родителя этого каталога, и все каталоги которые находятся на 2-а уровня вложенности выше и т.д., причём каждый список товаров, должен начинаться на 2-а элемента раньше чем текущий каталог.

Проще говоря мне нужно написать mySQL запрос который позволяет вытащить из таблицы n элементов, 2-а из которых (на изображении серые) находятся "выше" чем элемент который мы запрашиваем через ID (сразу оговорюсь, что ID не циферный).

Ребята по MSSQL советовали воспользоваться "SELECT Top -2", но к сожалению в MySQL есть только LIMIT, на котором, то, о чём я говорю написать невозможно.

У кого-нить есть какие-нибудь соображения на сей счёт? Может кто-то с этим уже сталкивался?

Автор: skyboy 16.9.2008, 10:25
Цитата(StreetPeople @  16.9.2008,  08:51 Найти цитируемый пост)
2-а из которых (на изображении серые) находятся "выше" чем элемент который мы запрашиваем через ID (сразу оговорюсь, что ID не циферный).

возможно, я тебя не понял, но мне кажется, что "через id" ты запрашиваешь не "телефоны", а "nokia n810". тогда решение будет зависеть от структурі хранения дерева.
потом: много ли разделов имеется? если немного, можно формировать дерево полностью, а потом отсекать ненужное.

Автор: ТоляМБА 16.9.2008, 10:29
Цитата(StreetPeople @  16.9.2008,  12:51 Найти цитируемый пост)
Проще говоря мне нужно написать mySQL запрос который позволяет вытащить из таблицы n элементов, 2-а из которых (на изображении серые) находятся "выше" чем элемент который мы запрашиваем через ID

Код
Select ID
from Table1
where id<='Телефоны'
Order by id DESC
Limit 3

По идее должен выдать
Цитата
Телефоны
Компьютеры
Кроссовки


Оно?


Автор: StreetPeople 16.9.2008, 11:20
Немного подредактировал запрос ТоляМБА

Код

Select ID
from Table1
where id<='Телефоны'
Order by id DESC
Limit 3


на

Код

Select ID
from mis_products
where id<=11 AND b_display=1
Order by id DESC
Limit 3



Вообще ID циферный, конечно, счётчик. Я сказал что id не циферный потому что, сразу понял, что мне предложат вариант с операторами сравнения, но такой способ не подходит, потому что можно случайно нарушить целостность представления товаров БД, потому что есть поле по которому все каталоги сортируются `mis_products_relations`.`position`, если это поле равно 0 для нескольких каталогов, тогда они сортируются соотв. порядку их созданию... Таким образом мы можем спокойно исправить поле `mis_products`.`id` любого товара на любое число не вписывающееся в последовательность и больше ID запрошенного товара и тогда запрос выше перестанет работать корректно, точнее - он это поле будет пропускать...




skyboy
Товаров и каталогов может быть очень много, в среднем 500-1000, поэтому закачивать всю таблицу было бы не экономично...
А насчёт Nokia N810, это просто неуглядел))) В общем он тоже чёрный, как и остальные нокии...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)