sql--CONVERT、FOR XML PATH解决实际问题

需求:每个平台分类下的门店,每个门店的名称、图片路径、评分,每个门店下的四个产品的名称、图片路径、评分

思路:

一开始门店动态化好写,用Ajax就行了。但是每个门店下面的产品,每个去请求一次查询有点不太现实。

一开始准备用每个门店的Id去发起请求,被自己蠢哭了。

在换个思路用sql语句吧

同时把这么多数据一把查出来。

 就是把这两张表拼成一张表,把数据作为一行数据在用符号分割,前台在取出来。

 WITH    td
          AS ( SELECT   Hishop_Stores.StoreId ,
                        Hishop_Stores.StoreName ,
                        Hishop_Products.FirstraceScore ,
                        Hishop_Products.StoreId AS id ,
                        Hishop_Products.ProductName ,
                        Hishop_Products.ImageUrl1
               FROM     ( SELECT    StoreId ,
                                    StoreName ,
                                                                        StoreImages,
                                    FirstraceScore
                          FROM      Hishop_Stores
                        ) AS Hishop_Stores
                        LEFT JOIN ( SELECT  StoreId ,
                                            ProductName ,
                                            FirstraceScore ,
                                            ImageUrl1
                                    FROM    Hishop_Products
                                    WHERE   ProductName IS NOT NULL
                                  ) AS Hishop_Products ON Hishop_Stores.StoreId = Hishop_Products.StoreId
             )
    SELECT  B.StoreId ,
            B.StoreName ,
            B.FirstraceScore ,
                        B.StoreImages,
            ( SELECT    CONVERT(VARCHAR(100), td.ProductName) + ‘|‘
                        + CONVERT(VARCHAR(100), ISNULL(td.FirstraceScore, 0))
                        + ‘|‘ + CONVERT(VARCHAR(100), ISNULL(td.ImageUrl1, ‘无‘))
                        + ‘=‘
              FROM      td
              WHERE     td.StoreId = B.StoreId
              ORDER BY  td.FirstraceScore DESC
            FOR
              XML PATH(‘‘)
            ) AS ProductList
    FROM    Hishop_Stores B
        where ShopTypeId=10
    GROUP BY StoreId ,
            StoreName ,
                        StoreImages,
            B.FirstraceScore;
    --ORDER BY B.FirstraceScore DESC;

结果:

OK

其中用到了CONVERT来转换格式,FOR XML PATH(‘‘)来实现行转列。

最后Ajax

$(function () {
       var shopTypeId = getParam(‘shopTypeId‘);
        $.ajax({
            type: "post", url: "/API/StoreProductAJAX.ashx", data: { action: ‘storelist‘,shopTypeId:shopTypeId },
              async: false,
            success: function (data)
            {

                 for (var i = 0; i < data.length; i++)
                 {
                     var msg = data[i];
                     var score = msg.FirstraceScore;
                     var name = msg.StoreName;
                     var list = msg.ProductList;

                     var strs = new Array(); //定义一数组
                     var strsnew = new Array(); //定义一数组
                     var strlist = new Array();
                     strs=list.split("="); //字符分割
                      for (ii = 0; ii < strs.length; ii++)
                      {
                          strsnew = strs[ii].split("|"); //字符分割
                           for (j = 0; j < strsnew.length; j++)
                            {
                               strlist.push(strsnew[j]);

                            }
                      //document.write(strs[i] + "<br/>"); //分割后的字符输出
                     }
                     //document.write( strlist+ "<br/>"); //分割后的字符输出
                     //alert(strsnew);
                     //if (name == "")
                     //{
                     //    continue;
                     //}

                     if (score == 0)
                     {
                         if (strlist[0] == "")
                         {
                             $("#store").append($(‘ <div class="list-lump border-t" id="‘ + msg.StoreId + ‘"><dl class="border-b"><dt><em><img src="‘+msg.StoreImages+‘" onerror="this.src=\‘/Storage/master/depot/img-1.jpg\‘"></em></dt><dd><span class="list-n1">‘ + msg.StoreName + ‘</span><a href="/vShop/StoreProductList?storeId=‘ + msg.StoreId + ‘">进店逛逛</a></dd></dl><ul class="clearfix border-b" id="product"> </li></ul></div>‘));
                              continue;
                         }。。。。

这边感觉自己写的有点蠢  不知道怎么去分割输出比较好

原文地址:https://www.cnblogs.com/symkmk123/p/9361781.html

时间: 2024-10-10 07:43:34

sql--CONVERT、FOR XML PATH解决实际问题的相关文章

使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理

在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样 --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT_ID ('dbo.TEST') IS NOT NULL DROP TABLE dbo.TEST GO CREATE TABLE dbo.TEST ( ID INT IDENTITY (1000,1) NOT NULL, cid INT,--接触记录号 REMARK VARCHAR (4000), CONT

SQL SERVER FOR XML PATH

转自:王波洋 (PS:对当前的博客进行了阅读,感觉不错,本来计划自己写一下,后来实在是时间不充裕并且博主写的不错,故转过来并稍微修正下) FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作. 一.FOR XML PATH 简单介绍           那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

使用 SQL的 for xml path来进行字符串拼接

本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3:简单介绍FOR XML PATH 4:解答问题 1.构造初始数据 举出一个经典的学生课程例子,共有学生.课程与学生课程三张表. 表1:Student student_id student_name 1 张三 2 李四 3 王五 表2:Course course_id course_name 1 语言

灵活运用 SQL SERVER FOR XML PATH 转

灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果

SQL Server FOR XML PATH 语句的应用---列转行

经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. DECLARE @TempTable table(UserID int , UserName nvarchar(50));insert into @TempTable (UserID,UserName) values (1,'a')insert into @TempTable (UserID

问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH

灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果

sql 使用 FOR XML PATH实现字符串拼接

sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍. 1,把图一的转换为图二: 1 SELECT articleID, 2 (SELECT CONVERT(varchar(10),tagID)+',' FROM articleTag_tb 3 FOR XML PATH('')) AS tagID FROM articleTag_tb GROUP BY articleID 以上是一个表的,下面看看多表关联的做法,其实是一样的只是连接表查询这是一个文章对应多个标

使用 SQL的 for xml path来进行字符串拼接 (group by)

参考: http://www.cnblogs.com/repository/archive/2011/01/18/1938418.html select convert(varchar(10),c.[STARTSPECDAY],120), (select [LeaveName]+' ' from ( select convert(varchar(10),a.[STARTSPECDAY],120) STARTSPECDAY,a.[LeaveName] from [test].[dbo].[View

灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO