2012-05-10 5 views
0

У меня есть класс продукта, который при создании экземпляра извлекает данные из таблицы «продукт», а также создает внутри него объект «Категория» (product-> category), который извлекает данные из таблицы категорий. Моя проблема заключается в том, что происходит, когда перечислены несколько продуктов из одной категории, для создания объекта категории выполняются несколько равных запросов, поскольку они относятся к одной категории. Как это решить?PHP: Выполнение одного и того же запроса снова и снова?

+2

показать свой код. – debianek

ответ

2

Используйте JOIN в вашем SQL:

SELECT * 
FROM product 
LEFT JOIN category ON product.category_id = category.id; 
1

Используйте завод, который создает объекты, а также предоставляют возможность данные для продукта/категории, которые передаются в конструктор. Завод загружает данные для всех продуктов, которые будут перечислены, чем создаются экземпляры объектов продукта, предоставляя уже полученные данные.

2

Вам нужно будет создать слой, который перехватывает и/или кэширует ваши запросы. Когда он увидит, что вы запрашиваете категорию с определенным идентификатором, она должна отображать эту категорию из своего кеша, а если ее нет, она должна быть восстановлена, а затем кэшировать ее, поэтому во время запроса одна и та же строка не будет запрашиваться больше чем единожды.

Выполнение этого вручную - no-go, просто выберите достойный ORM, который сделает это за вас.

0

Внутри цикла выполнение запроса sql не является хорошей практикой.

Что вы можете сделать, это оставить таблицу продуктов с таблицей категорий.

$select = SELECT * 
FROM product 
LEFT JOIN category ON product.category_id = category.id; 

Затем выполнить запрос, а затем классифицировать товары в категории основе , как вы можете запустить петлю

$result = mysql_query($select); 
while($data = mysql_fetch_assoc($result)){ 

    $product_info['product_name'] = $data['product_name']; 
    $product_info['price'] = $data['product_price']; 

    $product[$data['category']][$data['product_id']] = $product_info; 
} 

Этот цикл будет делать магию, что это поможет вам классифицировать продукты, подпадающие под эту категорию. И вы можете более эффективно отображать свои данные.

Смежные вопросы