отобразить список группа -> товар

example

Новичок
отобразить список группа -> товар

Ситуация следующая:
есть таблица каталогов и таблица товаров, нужно построить список вида
раздел1
|- товар 1.1
|- товар 1.2
|- товар 1.3
раздел2
|- товар 2.1
|- товар 2.2
|- товар 2.3

при этом с минимальным количеством запросов к БД.
сейчас делаю следующим образом
1. выбираю одним запросом все разделы каталога
2. цикл по массиву полученному из п.1
3. в цикле выборка товаров для раздела

таким образом получается 1 запрос на выборку всех разделов каталога и множество запросов для построения списка товаров для каждого раздела.

отсюда вопрос, каким образом сократить количество запросов для выборки товаров? выбирать все товары и делать цикл в цикле не выход, ибо 60% товаров в БД помечены как "удаленные" и в выборке не нуждаются.

-~{}~ 09.07.07 00:25:

PS. подобный список нужен для формирования on-line прайса.
 

maxru

МИФИст
В цикле сформировать SQL запрос с перечислением в IN всех требуемых id разделов.
Например $a - массив с id категорий товаров.
PHP:
$query="SELECT * FROM `таблица с товарами` WHERE `id категории` IN ('".implode("','",$a)."')";
На выходе получаете из БД портянку
id раздела | id товара | остальные параметры
И эту портянку раскидайте в массив или делайте с ней что хотите.

-~{}~ 09.07.07 01:58:

Если нужно отсеять "удаленные" товары, то запрос примерно такой:
PHP:
$query="SELECT * FROM `таблица с товарами` WHERE `id категории` IN ('".implode("','",$a)."') AND `параметр товар удален`!='1'";
-~{}~ 09.07.07 02:13:

P.S. Заметьте, поиск мануала по SELECT на офсайте mysql занял у меня 2 минуты. Неужели Вы готовы были ждать несколько часов, чтобы узнать истину?
 

planarik

Новичок
Еще проще
SELECT товары.*, разделы.название FROM товары INNER JOIN разделы ON (товары.ID_раздела=разделы.ID) WHERE товары.метка_удаления=0 ORDER BY разделы.название, товары.название

Далее одним циклом усе выводится.
 

example

Новичок
ну во первых, уважаемый maxru ака гуру СУБД mysql
Заметьте, поиск мануала по SELECT на офсайте mysql занял у меня 2 минуты.
я за Вас рад, но вы где то прочитали что я использую MySQL? если до Вас не дошло, то я просил Алгоритм а не пару строк бреда аля php+mysql

по теме.
пока сообразил следующий алгоритм
1. селектим все записи из талицы ака 'разделы каталога'
2. в цикле по массиву п.1 формируем цепочку ID записей
3. запрос к БД на выборку записей из таблицы ака 'товары' с условиями что:
3.1 флаг 'товар удален' равен нулю
3.2 ID раздела равен одному из значений в цепочке (п.2)

таким образом условно выполняется 2 запроса
1. выборка нужных разделов каталога
2. выборка товаров для сформированного списка разделов каталога

последний этап это цикл по п.1 в который вкладывается цикл по п.3 из чего можно построить список вида:
{название раздела 1}
{товар 1}
{товар N}
{название раздела N}
etc

ps. хотелось бы понять на сколько правильно составлен алгоритм построения списка разделов каталога и товаров.
 

maxru

МИФИст
Клиника.
Вы используете не SQL БД? Может плоские файлы? Или QBE?
Вы думаете, что поиск в мануале по Postgre или Oracle займет более получаса?
ну во первых, уважаемый maxru ака гуру СУБД mysql
Тыкните меня, может я случайно вписал себе в статус "гуру СУБД mysql"?

Вы просили, как сделать выборку НАИМЕНЬШИМ количеством запросов. Я дал вам пример в 2 запроса, другой форумчанин - в 1 запрос. Вам мало? Вы не можете распространить пример на другую БД? Ну тогда Вам не сюда обращаться надо.
 
Сверху