-2

製品のリストを表示する必要があります。2 つのテーブルがあり、1 つは で、categoriesもう 1 つはすべてでproducts.

そして、この構造を表示する必要があります:

list 1.
write - categories_id from categories table
write - list of products with the above categories_id from products table
end of list

next list2.
write - next categories_id from categories table
write - list of products with the above list2 categories_id from products table
end of list

等々...

したがって、categorys からすべてのcategories_id を選択し、products テーブルからすべての一致するcategories_ids を選択する必要があります。

これを行う最善の方法は何ですか?すべての製品を選択する必要がcategoriesありますか?

カテゴリ テーブルに 4 つのカテゴリがあるとします。したがって、各リストに 10 個の製品を含む 4 つのリストが表示されるはずです。私が持っているSQLは次のようになります。

sql3 = "SELECT * from categories c inner join products p on c.categories_id = p.categories_id where p.userid ='1' group by c.categories_id order by c.categories_id;"

and the do until looks like:
do until rs.eof
rs("categoriName")

rs("productsName")

rs.movenext
loop

しかし、これにより、それぞれに 1 つの製品しかない 4 つのリストが生成されますか?

OK、私のテーブルは次のようになります。

categories table:
categories_id, userId, categoriesName

products table:
products_id, user_id, categories_id, productsName


And the do:
<% do until rs.eof %>
Categori: <%=rs("categoriesName")%>

Product:<%=rs("productsName")%>
<% rs.movenext
loop %>

リストは次のようになります。

(list 1)
Categori: Phones
Product: iPhone
Product: Samsung
Product: Nokia

(list 2)

Categori: Tvs
Product: Philips
Product: Sony
Product: Sharp

たぶん、1回の選択でこれをやろうとしているのが間違っていると思っているだけかもしれません.2回の選択が必要なのかもしれません.最初にカテゴリ名を選択してループし、そのループ内で製品を選択します。

4

1 に答える 1

0

すべてのカテゴリとそれに対応する製品を取得するクエリを次に示します。

SELECT
    c.CategoryName, P.ProductName, p.Price, ... //What data you want to select
FROM
    CategoriesList c
INNER JOIN 
    Products p ON c.Id = p. CategoryId
ORDER BY 
    c.CategoryName, p.ProductName

これは、データを取得するために使用する最善の方法です。次に、このクエリを使用するアプリケーションで必要な方法でこれらの結果を出力できます。たとえば、最初categorynameの結果をタイトルとして出力し、そのproductsリストをサブアイテムとして出力する必要があります。

更新:たとえば、コンソールアプリケーションでそれらを出力する方法は次のとおりです。

foreach( var category in categoriesList)
{
    Console.WriteLine("(List {0})", category.Id);
    Console.WriteLine("Category: {0}", category.Name);
    foreach(var product in category.Products)
    {
         Console.WriteLine("Product: {0}", product.Name); 
    }
}

これは次のように表示されます。

(list 1)
Category: Phones
Product: iPhone
Product: Samsung
Product: Nokia
(list 2)
Category: Tvs
Product: Philips
Product: Sony
Product: Sharp
...

データベースからのデータは、次の形式の表形式のデータであることに注意してください。

 CategoryId  | CategoryName  |  ProductName |
-------------+---------------+--------------+
      1           Phones          iPhone
      1           Phones          Samsung  
     ...

これでデータベースの役割は終わりです。なぜなら、データベースはデータをどのように表現するか、またはデータがどのように見えるかに関するものではないからです。これは、アプリケーション側で行う必要があります。Cateogry->List of Productsの形式で、データ アクセス レイヤー (Ado.net、LINQ to SQL など) に応じたオブジェクト関係構造のリストを取得する必要があります。たとえばlinqを使用すると、次のようにする必要があります。

var CategoriesWithProducts = Categories.Join(
Products,
c => .Id,
p => p.CategoryId,
(Category, Products) =>
   new
   {
       Category = category,
       ItsProducts = products 
   });

foreach( cateogyr in CategoriesWithProducts)
{
   Console.WriteLine("(List {0})", category.Id);
   Console.WriteLine("Category: {0}", category.Name);
   foreach(var product in category.ItsProducts)
   {
         Console.WriteLine("Product: {0}", product.Name); 
   }
}

ADO.net またはその他の DAL を使用していて、これらの結果をリレーショナルな方法で取得する方法がない場合は、これを手動で行う必要があります。つまり、データの各行に対してカテゴリ名のみを出力し、対応する製品を一覧表示します。 .

これは、データ表現について考える方法であり、常にデータをフォーマットし、データベース側ではなく、アプリケーションのプレゼンテーション層でどのように表示されるかです。

これが役立つことを願っています。

于 2012-04-21T06:16:08.047 に答える