2012-04-21 5 views
-2

私はいくつかの製品のリストを表示する必要があります。 私はcategoriesと1つで、productsの2つのテーブルを持っています。テーブル1のカテゴリとテーブル2の製品を選択しますか?

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

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 

のように...

だから私は、カテゴリと製品テーブルからすべてのマッチングcategories_idsからすべてのcategories_idを選択する必要があります。

これを行う最善の方法は何ですか? categoriesからすべてを選択してから、do ...まですべての製品を選択するか...または?

カテゴリテーブルには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つの選択肢が必要です。最初はカテゴリ名を選択し、それをループしてループ内で商品を選択します。ここで

+1

これは基本的なSQLです。あなたが扱うことができないすべてのSQLクエリについて質問をすることによって完全なプログラムを作ることができないので、本を読んで読むのが良いです。 – Aristos

答えて

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 
    ... 

ここに表形式のデータがあります。 dbはデータの表現方法やデータの表示方法に関するものではないため、データベースの役割は終了しています。これはアプリケーション側で行う必要があります。 Cateogry-> List of Productsのように、データアクセス層(Ado.net、LINQ to SQLなど)に応じて、オブジェクトの関連構造のリストを取得する必要があります。あなたがADO.netやその他のDALを使用していて、リレーショナルな方法でこれらの結果を取得する方法がない場合、あなたはこれを手動で行う必要があります

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); 
    } 
} 

、すなわち:あなたがこれを行う必要があり、たとえば、LINQを使用します:データの行ごとにカテゴリ名を出力してから、対応する製品を一覧表示します。

これは、データベース側ではなく、アプリケーションのプレゼンテーションレイヤーでデータ表現とデータ表示の見た目を変える方法です。

これは役に立ちます。

+0

ありがとうMGA、私は私の質問を更新しました。 –

+0

@ClaesGustavsson、更新されたクエリでは、 'm.userid' mは何のエイリアスであり、このユーザは各カテゴリに対して1つのプロダクトしか持たないかもしれません。あなたのテーブル 'categories'と' products'のサンプルデータと、結果がどのように見えるかのサンプルを含めることができれば役に立ちます。 –

+0

ありがとうMGA、もう一度更新しました。 –

関連する問題