помощь в организации моих данных sql (продукты сгруппированы по категориям - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь отобразить все мои продукты в своей категории, так что-то вроде:

Категория Название1 Название продукта1, Название продукта2 ... Название категории2 Название продукта3, Название продукта4 ...

Я использую oscommerce, поэтому структура базы данных не мой выбор. Таблицы базы данных, которые мне нужно использовать:

products_to_categories: содержит идентификаторы products_id и category_id products_description: содержит products_id и products_name (другая информация в этой таблице не важна) описание_класса: содержит идентификатор_категории и имя_категории

Я перепробовал все, и я могу только повторить продукты (все вместе) и категории все вместе, но я не могу получить их так, чтобы все продукты в категории находились под указанным именем

Как я уже сказал, все, что я попробовал, привело к тому, что просто повторили все категории И ТОГДА все продукты

Я очень надеюсь, что вы можете помочь

спасибо

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

Я не совсем понимаю, как вы хотите отобразить. Я надеюсь, что вам нравится показывать это

Category Name1 
        Product Name1
        Product Name2 
Category Name2 
        Product Name3
        Product Name4

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

Если список категорий огромен, хранить его в массиве и циклично будет плохой идеей.

1 голос
/ 12 февраля 2011

Есть два способа приблизиться к этому, и Zod уже дал здесь ответ на этот вопрос.

Первый способ - использовать category_description для получения всех категорий (полно ли продуктов или нет), второй способ - извлечь только те категории, которые используются (т.е. не получить полный список категорий).Я пройду первый путь;получение всех категорий.

Пройдите через category_description и получите идентификаторы и имена категорий в массив.

Теперь запустите этот массив с помощью foreach и получите все product_ids из products_to_categories.(SELECT products_id FROM products_to_categories WHERE categories_id=[CATEGORY ID GOES HERE]).

Теперь, когда у вас есть идентификаторы продуктов, которые связаны с категорией одновременного использования, вы можете пройти через products_description и получить их имя.По сути, ваш код должен выглядеть так:

foreach ($categories as $category) {
   ...display category name and run code to get product ids...
   foreach ($products as $product) {
       ...get product name from products_description...
       ...display product name...
   }
}
0 голосов
/ 08 февраля 2011

Вам, вероятно, понадобится LEFT JOIN в вашем SQL, чтобы объединить три таблицы и упорядочить запрос по category_name, product_name.

Что-то вроде:

SELECT p.product_id, p.product_name, c.category_name FROM `products_description` p
LEFT JOIN `products_to_categories` linker ON linker.product_id=p.product_id
LEFT JOIN `category_description` c ON linker.category_id=c.category_id
ORDER BY c.category_name, p.product_name

Тогда ваш PHP для вывода списка будет выглядеть примерно так:

$data = array(); // Data from query above
$cur_category = '';
foreach($data as $product) {
  if ($product['category_name'] != $cur_category) {
    // Category changed; display it
    echo $product['category_name'].": ";
    $cur_category = $product['category_name'];
  }
  echo $product['product_name'].", ";
}
...