Оптимизация кода

codsteep

Новичок
Оптимизация кода

Есть база, в ней три таблицы:
CAT ( id_c | name_c) - таблица с категорией товара, около 100 записей
SUBCAT ( id_sc | name_sc | id_c) - таблица с подкатегорией товара, id_c - идентификатор категории, около 1000 записей.
LISTPROD (id_t | name_t | id_c | id_sc) - сам товар, с идент. категории и подкатегрии..., около 5000 записей
Необходима выводить на одной стр. товар из категории с подкатегорией и именем товара... т.е., что то вроде:

Категория1
Подкатегория1
Товар1
Товар2
Товар3
Подкатегория2
Товар4
Товар5
Товар6

Реалезованно примерно так:
PHP:
"SELECT * FROM CAT WHERE id_c='".$id_c."'"
echo "$name_c";
while{
"SELECT * FROM SUBCAT WHERE id_c='".$id_c."'"
echo "$name_sc";
while{
"SELECT * FROM LISTPROD WHERE id_c='".$id_c."' AND id_sc='".$id_sc."'"
echo "$name_t"
}
}
Т.е. вложенным while.... но есть подозрение, что получается слишком громоздко... можно ли это оптимизировать?
 

codsteep

Новичок
Нет... Какое меню? Просто на страницу выводиться...
Раньше всё проще было... На страницу выводился только список подкатегорий-типа линки, а уже щёлкнув по ним получали товары... А теперь всё вместе выводить надо.
Так можно ли этот код улучшить или нет?
 

Romantik

TeaM PHPClub
Можно!
LISTPROD (id_t | name_t | id_c | id_sc)- id_sc нафик не нужно
А лучше вообще заменить три таблицы- одной
id | parent_id | name
 

codsteep

Новичок
без id_sc - никак.... скорее id_c, можно было бы убрать.
id_c - нужно для другого запроса))))
Во первых как я заменю три таблицы одной? Во вторых Не слишком большая таблица будет??
 

Falc

Новичок
А что ту подробнее?

SELECT * FROM LISTPROD WHERE id_c='".$id_c."'

А дальше все делаешь ПЫХом.
 

codsteep

Новичок
Э... не понял, всё равно придётся ещё запросы делать
SELECT * FROM LISTPROD WHERE id_c='".$id_c."'- я получу только спискок товаров в этой категории, а надо, что б они были разбиты на подкатегории:
Вывод вот такой:

Железо
----
->Круглое
--->С зазубринами
--->С синевой
--->Гнутое
--->Гнутое и выправленное
->Не Круглое
--->Без зазубринами
--->Без синевой
--->Не Гнутое
--->Не Гнутое и выправленное
 

Falc

Новичок
codsteep
>>а надо, что б они были разбиты на подкатегории

А на подкатегории уже ПЫХом. А что бы было проще, то лучше так:
SELECT * FROM LISTPROD WHERE id_c='".$id_c."' ORDER BY id_sc

-~{}~ 18.05.04 10:46:

Если тебе надо выводить сразу и все категории а не только подкатегории, то:
SELECT * FROM LISTPROD ORDER BY id_c, id_sc
 

codsteep

Новичок
Ну с сортировкой понятно.... А как я ПХП разобью на подкатегории?? Имена подкатегории хранятся вместе с id_sc хранятся в БД! Т.е. тоже запрос надо делать!

-~{}~ 18.05.04 10:47:

нет. категории не надо
 

Falc

Новичок
codsteep
Имена подкатегорий можно либо приджойнить, либо предварительны вытащить в масив.
 

codsteep

Новичок
Ну вот получил я два массива в одном товар в другом подкатегории...А как тепрерь их перебрать?...
Что то типа получам в цикле id_sc n-го эл-та массива с подкат., и выбираем все эл-ты с таким же id_sc из массива с товаром?
 

Falc

Новичок
Выводишь товары пока категория товара равна категории предыдущего товара, если категория меняется, выводим категорию и дальше уже товары для нее.
 

codsteep

Новичок
Действительно, так лучше....
И ещё вопрос. насколько это эффективнее чем, самый первый пример?
 

Falc

Новичок
>>И ещё вопрос. насколько это эффективнее чем, самый первый пример?

Вот как раз в этом и заключается твоя задача проверить эфективность данного метода :)
 

Romantik

TeaM PHPClub
codsteep
странный ты.
тебе же дали совет по оптимизации (в одну таблицу все) и найти приемлемые классы для обработки дерева (nested_sets)
 

Falc

Новичок
Romantik
Кстати все в одном дереве будет работать медленее.
 

Romantik

TeaM PHPClub
Falc
У меня подобное, только формировало меню, было давно
Потом нехватило вложенности (кстати тоже в будущем нужно бывает) и перешел на дерево в одной таблице... прирост скорости был примерно на 20%
 

Falc

Новичок
Romantik
Я не спорют с тем что в одном дереве универсальнее и удобнее.
Но все-таки когда все в одной таблице это медленее.
А твой прирост я подозреваю связан с тем сто ты более эффективно написал новые скрипты нежели были старые.

Если человеку нужно, только ускорить один скрипт, то нет смысла менять структуру базы и переписывать весь сайт.
 
Сверху