2010-09-29 1 views
1

Я пытаюсь оптимизировать PHP-код для следующей таблицызапрашивая таблица категорий самих отношений

Create table categories (
    cat_id Int UNSIGNED NOT NULL AUTO_INCREMENT, 
    parent_id Int UNSIGNED, 
    cat_name Varchar(50) NOT NULL, 
Primary Key (cat_id)) ENGINE = InnoDB; 

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

вот мой код для перечисления всех основных категорий

$result = mysql_query("SELECT cat_id, cat_name FROM categories WHERE parent_id IS NULL"); 

Чтобы перечислить отдельные подкатегории каждой категории я использую следующий запрос

$sub_result = mysql_query ("SELECT cat_id, cat_name FROM categories WHERE parent_id=$cat_id"); 

У меня есть 30 категорий так что приведенные выше вопросы, 30 запросов на каждой странице, я пытаюсь свести к минимуму количество запросов. Любой намек?

Благодаря

ответ

1

В статье на managing hierarchical data может дать вам некоторое вдохновение. Не обескураживайте тем фактом, что он находится на сайте MySQL, основные идеи одинаковы.

0

Это сложно в MySQL из-за отсутствия поддержки рекурсивных запросов.

Существует несколько альтернативных способов структурирования таблицы, чтобы вы могли запросить всех потомков иерархии в одном запросе. Но они связаны с изменением способа хранения данных.

См. Мою презентацию Models for Hierarchical Data with SQL and PHP для примеров, демонстрирующих несколько решений.