0

カテゴリ内のすべての製品を表示しようとしているので、次のようになります。

カテゴリ名1 商品名1、商品名2 ... カテゴリ名2 商品名3、商品名4 ...

私は oscommerce を使用しているため、データベース構造は私の選択ではありません。私が使用する必要があるデータベーステーブルは

products_to_categories: products_id とcategories_id を保持します products_description: products_id と products_name を保持します (この表の他の情報は重要ではありません) category_description: category_id とcategories_name を保持します

私はすべてを試しましたが、製品 (すべてまとめて) とカテゴリをすべて一緒にエコーすることしかできませんが、カテゴリ内のすべての製品が指定された名前の下にあるという方法でそれらを取得することはできません

私が試したすべてのことを言ったように、すべてのカテゴリとすべての製品を単純にエコーする方法になりました

あなたが助けてくれることを本当に願っています

ありがとう

4

3 に答える 3

1

これにアプローチするには 2 つの方法があり、その背後にあるアイデアは、Zod によってここで回答として既に与えられています。

最初の方法は、category_description を使用してすべてのカテゴリを取得することです (製品でいっぱいかどうかに関係なく)。2 番目の方法は、使用されているカテゴリのみを抽出することです (つまり、カテゴリの完全なリストを取得しません)。最初の方法を使用します。すべてのカテゴリを取得します。

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 に答える
1

どのように表示したいのか完全にはわかりません。このように表示していただければ幸いです

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

私が考える最も簡単な方法は、配列内のカテゴリの個別のリストを取得することです。cat id と cat name を使用して、Category ごとに製品を配列して印刷するループ。

カテゴリ リストが膨大な場合、それを配列に格納してループすることはお勧めできません。

于 2011-02-07T21:14:09.470 に答える
0

3 つのテーブルを一緒にマージLEFT JOINし、クエリを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 に答える