0

我想在他们的类别中展示我所有的产品,比如:

类别名称1 产品名称1、产品名称2 ... 类别名称2 产品名称3、产品名称4 ...

我正在使用 oscommerce,所以数据库结构不是我的选择。我需要使用的数据库表是

products_to_categories:保存 products_id 和 categories_id products_description:保存 products_id 和 products_name(此表中的其他信息不重要) category_description:保存 categories_id 和 categories_name

我已经尝试了一切,我只能呼应产品(全部)和类别,但我无法以某个类别中的所有产品都位于指定名称下的方式获得它们

正如我所说,我尝试的一切都以一种简单地呼应所有类别然后是所有产品的方式产生

我真的希望你能帮忙

谢谢

4

3 回答 3

1

我不完全了解您要如何显示。我希望你喜欢这样展示

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

我认为最简单的方法是在数组中获取不同的类别列表。使用 cat id 和 cat name 循环该数组并打印每个类别的产品。

如果类别列表很大,将其存储在数组中并且循环将是一个坏主意。

于 2011-02-07T21:14:09.470 回答
1

有两种方法可以解决这个问题,Zod 已经给出了背后的想法作为答案。

第一种方法是使用category_description 获取所有类别(无论是否充满产品),第二种方法是仅提取使用的类别(即,未获得完整的类别列表)。我将通过第一种方式;获取所有类别。

运行 category_description,并将 ID 和类别名称放入一个数组中。

现在,遍历该数组foreach并从 products_to_categories 中获取所有 product_id。( SELECT products_id FROM products_to_categories WHERE categories_id=[CATEGORY ID GOES HERE])。

现在您有了与并发类别相关联的产品 ID,您可以运行 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...
   }
}
于 2011-02-12T07:43:16.817 回答
0

您可能需要LEFT JOIN在 SQL 中使用 a 来将三个表合并在一起,并按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'].", ";
}
于 2011-02-07T21:00:33.637 回答