0

SQL から製品画像のリストを取得して、画像のスライドショーに表示したいと考えています。

ただし、MS SQL ストアド プロシージャからデータを返す最善の方法がわかりません。

問題は、以下の SP では、画像ごとに重複したレコードが取得されることです。理想的には、配列または文字列リスト、または単一のレコードからデータを分割する何らかの方法を取得したいと考えています。しかし、私は他の解決策を受け入れます。私の目標は、直感的な方法でページ上の画像を取得することです。これは、ASP.Net C# アプリケーション用です。

これは、ストアド プロシージャからの簡略化された select ステートメントです。

  SELECT 

  P.[ProductId]
  ,P.[ProductName]
  ,I.[FileName] as ProductImage

  FROM [Product] P
  LEFT JOIN [ProductImages] I
  on P.ProductId = I.ProductId

  Where P.ProductId = @ProductId

これにより、次のようなデータが返されます。

ProductId         ProductName       ProductImage
1                 Coffee Mug        Mug_Image1.jpg
1                 Coffee Mug        Mug_2.jpg
1                 Coffee Mug        Mug_Img3.jpg

私はそれを次のようにしたいと思っています(しかし、他のアイデアも聞きたいです):

ProductId         ProductName       ProductImage
1                 Coffee Mug        Mug_Image1.jpg, Mug_2.jpg, Mug_Img3.jpg

繰り返しますが、これが最善の方法かどうかはわかりません。

私は2つのテーブルを持っています。1 つは Product で、もう 1 つは ProductImages で、Product テーブルの ProductId への FK があります。

最終的には、JSON を構築して、クライアントのスライドショー スクリプトにフィードする必要があります。このような:

productimages = [
        { "image": "Mug_Image1.jpg", "caption": "", "link": "", "title": "" },
        { "image": "Mug_2.jpg", "caption": "", "link": "", "title": "" },
        { "image": "Mug_Img3.jpg", "caption": "", "link": "", "title": "" }
                                    ];

ここにC#があります

//Create product object to display on page
ProductEntity product = new ProductEntity();
product.Id = idval;
//Load the product from SP based on ID
ProductWF.LoadProduct(product);

//Render product details on page
ProductNameLabel.Text = product.ProductName;

//Construct JSON image list
StringBuilder sb = new StringBuilder();
etc...
4

1 に答える 1

1

次のようなものを使用できます。

SELECT
   P.[ProductId],
   P.[ProductName],
   FileNames = STUFF(
               (SELECT ', ' + FileName FROM ProductImages 
                WHERE ProductId = P.ProductId FOR XML PATH('')) , 1 , 1 , '')
      FROM 
        [Product] P

それが役立つ場合は、各製品のファイル名のコンマ区切りリストを取得します。ただし、生成する JSON 文字列は、既に取得しているクエリ結果からはるかに単純に構築される場合があります。

上記のクエリを取得すると、それをクラスにマップできます。

public class Product
{
   public int ProductId {get; set;}
   public string ProductName {get; set;}
   public string FileNames {get; set;}
}

サーバー側では、FileNames 文字列プロパティを分割し、json 文字列を作成する必要があります。

于 2012-05-22T13:41:18.260 に答える