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;
}
。。。。
这边感觉自己写的有点蠢 不知道怎么去分割输出比较好
sql--CONVERT、FOR XML PATH解决实际问题的更多相关文章
- 使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理
在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样 --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT ...
- 二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增
一.sql新增后返回主键 1,返回自增的主键: INSERT INTO 表名 (字段名1,字段名2,字段名3,…) VALUES (值1,值2,值3,…) SELECT @@IDENTITY 2,返回 ...
- 灵活运用 SQL SERVER FOR XML PATH 转
灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些 ...
- SQL Server FOR XML PATH 语句的应用---列转行
经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用 ...
- 问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH
灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前 ...
- 使用 SQL的 for xml path来进行字符串拼接
本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3: ...
- sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨
写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合. 在不 ...
- sql 使用 FOR XML PATH实现字符串拼接
sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍. 1,把图一的转换为图二: SELECT articleID, (),tagID)+',' FROM arti ...
- 使用 SQL的 for xml path来进行字符串拼接 (group by)
参考: http://www.cnblogs.com/repository/archive/2011/01/18/1938418.html select convert(varchar(10),c.[ ...
随机推荐
- [saiku] 简介、下载、安装和教程
一.简介 Saiku成立于2008年,由Tom Barber和Paul Stoellberger研发. 最初叫做Pentaho分析工具,起初是基于OLAP4J库用GWT包装的一个前端分析工具. 经过多 ...
- 符合RESTful规范的API
统一使用的utils,serializers: class BaseResponse: def __init__(self): self.code = 1000 self.data = None se ...
- PyQt5系列教程(四)信号和槽
软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 前言 信号(Signal)和槽(Slot)是Qt编程中对象间通讯的机制.在Qt中,每一个QObject对象, ...
- 在ubuntu14.04上搭建OpenVPN服务
简介 在连接了不可信的网络环境后,让手机或者计算机安全的访问互联网,使用虚拟专用网络(Virtual Private Network,VPN)是一个解决办法.OpenVPN是一个SSL VPN完整解决 ...
- tensorflow 基本函数(1.tf.split, 2.tf.concat,3.tf.squeeze, 4.tf.less_equal, 5.tf.where, 6.tf.gather, 7.tf.cast, 8.tf.expand_dims, 9.tf.argmax, 10.tf.reshape, 11.tf.stack, 12tf.less, 13.tf.boolean_mask
1. tf.split(3, group, input) # 拆分函数 3 表示的是在第三个维度上, group表示拆分的次数, input 表示输入的值 import tensorflow ...
- asp.net 初级程序员面试题【待续】
C# 常见的排序方式 冒泡排序(Bubble sort) 堆排序(Heap sort) 插入排序(Insertion sort) 归并排序(Merge sort) 快速排序(Quick sort) ...
- LUA表的引用理解
--lua中引用类型都是分配在堆上的 --因此,我们在使用LUA的table时,可尽可能的使用表的引用,而不需要拷贝表里的元素 --比如,通过RPC协议传来一个表A,我们想要缓存这个表,只需要保存该表 ...
- python 把txt文件分隔成0.8和0.2的比例的新文件
from math import sqrt import randomimport osfrom sklearn import cross_validation os.chdir("/*&q ...
- Linux运维基础入门(四):Linux中的网络知识04
一,虚拟机的安装 略 二,Linux系统下的网络配置(Linux虚拟机的网络设定为桥接模式) 桥接模式:虚拟机同主机一样,在网络中相当于一个真实存在的装有Linux系统的电脑.(我们先用这个模式) N ...
- shader一般都是用工具调试的
N卡的话用nvidia的nVidia FX Composer, A卡的话用ATI的render monkey 顶点着色器从何方拿到这些数据?在U3D环境下,答案是从绑定到game object中的Me ...