jquery 在地图上选择地点(添加标记),获取经玮度

Continue Read..
html:
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">经纬度:</label>
<div class="col-xs-12 col-sm-9">
<div class="">
<input type="text" id="fillSlng" placeholder="经度,纬度" name="jwd" class="col-xs-10 col-sm-5" onchange="changeJwd()"/>
<input type="hidden" name="ing" id="ing"/>
<input type="hidden" name="lat" id="lat"/>
&nbsp;
<button type="button" class="btn btn-sm btn-primary" onclick="selectMap();">
地图选点
<i class="ace-icon fa fa-arrow-right icon-on-right bigger-110"></i>
</button>
</div>
</div>
</div>
<div class="space-2"></div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">地址: </label>
<div class="col-xs-12 col-sm-9">
<div class="">
<input type="text" id="address" name="address" maxlength="200" role="textbox" class="col-xs-10 col-sm-5">
</div>
</div>
</div>
<div class="space-2"></div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">城市名称: </label>
<div class="col-xs-12 col-sm-9">
<div class="">
<select role="select" size="1" id="province" class="province" data-value="" data-first-title="选择省"></select> 
<select role="select" size="1" id="city" class="city" data-value="" data-first-title="选择市"></select> 
<select role="select" size="1" id="area" class="area" data-value="" data-first-title="选择地区"></select>
</div>
</div>
</div>
<div class="space-2"></div>

<div class="parking_map">
<div id="iCenter" style="width: 60%;height:70%;margin-left:20%;margin-top:5%;"></div>
<div style="background: white;width: 60%;height:40px;margin-left:20%;">
<div style="width:220px;float:right;">
<button class="btn btn-primary" style="border:none;" onclick="makeSure();">确 定</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button class="btn" onclick="cancelSlng();">取 消</button>
</div>
</div>
</div>

<script src="http://webapi.amap.com/maps?v=1.3&key=213acaf38828fab4d9a6e9159c6a1de2"></script>
var mapObj;
var marker = new Array();
var windowsArr = new Array();
var slnglat = '';

function selectMap() {
$(".parking_map").show();
var marker;
mapObj = new AMap.Map("iCenter");
//�����Ҽ�˵�
var contextMenu = new AMap.ContextMenu();
//�Ҽ����Marker���
contextMenu.addItem("添加标记",function(e){
mapObj.clearMap();
var marker = new AMap.Marker({
map:mapObj,
draggable:true,
position: contextMenuPositon, //����
icon:"http://webapi.amap.com/theme/v1.2/0.png", //markerͼ�ֱ꣬�Ӵ��ݵ�ַurl
offset:{x:-8,y:-34} //����ڻ���λ��
});
AMap.event.addListener(marker,'dragend',function(e){
slnglat = marker.getPosition().getLng()+","+marker.getPosition().getLat();
});
},0);
//��ͼ������һ��¼����������Ҽ�˵�
AMap.event.addListener(mapObj,'rightclick',function(e){
contextMenu.open(mapObj,e.lnglat);
contextMenuPositon = e.lnglat;
slnglat = e.lnglat.getLng()+","+e.lnglat.getLat();
});
}

function makeSure() {
$(".parking_map").hide();
document.getElementById("fillSlng").value = slnglat;
var parking_lng = slnglat.split(",")[0].substring(0, slnglat.split(",")[0].length);
var parking_lat = slnglat.split(",")[1].substring(0, slnglat.split(",")[1].length);
$("#ing").val(parking_lng);
$("#lat").val(parking_lat);
var geocoder;
var lnglatXY = new AMap.LngLat(parking_lng, parking_lat);
//���ص�������� 
mapObj.plugin(["AMap.Geocoder"], function() {
geocoder = new AMap.Geocoder({
radius: 1000, //����֪���Ϊ���ĵ㣬radiusΪ�뾶�����ط�Χ����Ȥ��͵�·��Ϣ 
extensions: "all" //���ص�ַ�����Լ�������Ȥ��͵�·��Ϣ��Ĭ��"base" 
});
//���ص�������� 
AMap.event.addListener(geocoder, "complete", geocoder_callBack);
//�������� 
geocoder.getAddress(lnglatXY);
});
}

function geocoder_callBack(data) { //�ص�����
var resultStr = "";
var roadinfo = "";
var poiinfo = "";
var address;
//���ص�ַ����
address = data.regeocode.formattedAddress;
$("#address").val(address);
// var cityName = data.regeocode.addressComponent.city;
// if (cityName == "") {
// cityName = data.regeocode.addressComponent.province;
// }
var provinceName = data.regeocode.addressComponent.province;
var cityName = data.regeocode.addressComponent.city;
var areaName=data.regeocode.addressComponent.district;
//$("#city").val(cityName);
$("#province option[text='"+provinceName+"']").attr("selected", "selected");
$("#province").trigger("change");
$("#city option[text='"+cityName+"']").attr("selected", "selected");
$("#city").trigger("change");
$("#area option[text='"+areaName+"']").attr("selected", "selected");
}

function cancelSlng() {
$(".parking_map").hide();
}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

jquery 获取经玮度

Continue Read..
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&amp;key=402a66ea45ea79960fc0f8591fffb804"></script>

html:
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">lat: </label>
<div class="col-xs-12 col-sm-9">
<div class="">
<input type="text" id="lat" name="lat" maxlength="10" role="textbox" class="col-xs-10 col-sm-5">
</div>
</div>
</div>
<div class="space-2"></div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">lng: </label>
<div class="col-xs-12 col-sm-9">
<div class="">
<input type="text" id="lng" name="lng" maxlength="10" role="textbox" class="col-xs-10 col-sm-5">
</div>
</div>
</div>
<div class="space-2"></div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3 no-padding-right">&nbsp;</label>
<div class="col-xs-12 col-sm-9">
<input type="button" value="获取当前位置" onclick="getCurrentPosition()"/>
<label id="result" style="color:blue;font-size:12px;padding:0px 0px 0px 10px;"></label>
<label style="color:red;font-size:12px;padding-left:10px;">*单击后,请稍等片刻;若获取当前位置失败,请刷新浏览器重试</label>
</div>
</div>
<div class="space-2"></div>

<script type="text/javascript">
var map, geolocation;
   //加载地图,调用浏览器定位服务
   map = new AMap.Map('mapContainer', {
       resizeEnable: true
   });
   map.plugin('AMap.Geolocation', function() {
       geolocation = new AMap.Geolocation({
           enableHighAccuracy: true,//是否使用高精度定位,默认:true
           timeout: 10000,          //超过10秒后停止定位,默认:无穷大
           maximumAge: 0,           //定位结果缓存0毫秒,默认:0
           convert: true,           //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
           showButton: true,        //显示定位按钮,默认:true
           buttonPosition: 'LB',    //定位按钮停靠位置,默认:'LB',左下角
           buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
           showMarker: true,        //定位成功后在定位到的位置显示点标记,默认:true
           showCircle: true,        //定位成功后用圆圈表示定位精度范围,默认:true
           panToLocation: true,     //定位成功后将定位到的位置作为地图中心点,默认:true
           zoomToAccuracy: true      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
       });
       map.addControl(geolocation);
       AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
       AMap.event.addListener(geolocation, 'error', onError);      //返回定位出错信息
   });
//获取当前位置信息
   function getCurrentPosition() {
    $("#result").html("");
       geolocation.getCurrentPosition();
   };
   //解析定位结果
   function onComplete(data) {
       //var str = '<div>定位成功</div>';
       // str += '<div>经度:' + data.position.getLng() + '</div>';
       // str += '<div>纬度:' + data.position.getLat() + '</div>';
       // str += '<div>精度:' + data.accuracy + ' 米</div>';
       // str += '<div>是否经过偏移:' + (data.isConverted ? '是' : '否') + '</div>';
       //result.innerHTML = str;

       $("#result").html("获取成功");
       $("#lat").val(data.position.getLat());
       $("#lng").val(data.position.getLng());
   };
   //解析定位错误信息
   function onError(data) {
       var str = '定位失败';
       str += '【错误信息】:'
       switch (data.info) {
           case 'PERMISSION_DENIED':
               str += '浏览器阻止了定位操作';
               break;
           case 'POSITION_UNAVAILBLE':
               str += '无法获得当前位置';
               break;
           case 'TIMEOUT':
               str += '定位超时';
               break;
           default:
               str += '未知错误';
               break;
       }
       //str += '</p>';
       //result.innerHTML = str;
       $("#result").html(str);
       $("#result").css("color","red");
   };
</script>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

beego分页bootstrap V3风格

Continue Read..

修改自简单的beego分页功能代码,原版里的样式比较特别,现在改成了bootstrap风格

看图:

点击查看原图

点击查看原图

点击查看原图

 

看代码:

package pager

/**
 * 分页功能
 * 支飞亚
 * 2014-9-1
 *
 * bootstrap V3风格
 * wulin
 * 2015-09-24
 */
import (
	// "fmt"

	"github.com/astaxie/beego/context"
	"github.com/astaxie/beego/orm"
	html "html/template"
	con "strconv"
	"strings"
	"time"
)

type PageOptions struct {
	TableName           string //表名  -----------------[必填]
	Conditions          string //条件
	Currentpage         int    //当前页 ,默认1 每次分页,必须在前台设置新的页数,不设置始终默认1.在控制器中使用方式:cp, _ := this.GetInt("pno")   po.Currentpage = int(cp)
	PageSize            int    //页面大小,默认20
	LinkItemCount       int    //生成A标签的个数 默认10个
	Href                string //A标签的链接地址  ---------[不需要设置]
	ParamName           string //参数名称  默认是pno
	FirstPageText       string //首页文字  默认"首页"
	LastPageText        string //尾页文字  默认"尾页"
	PrePageText         string //上一页文字 默认"上一页"
	NextPageText        string //下一页文字 默认"下一页"
	EnableFirstLastLink bool   //是否启用首尾连接 默认false 建议开启
	EnablePreNexLink    bool   //是否启用上一页,下一页连接 默认false 建议开启
}

/**
 * 分页函数,适用任何表
 * 返回 总记录条数,总页数,以及当前请求的数据RawSeter,调用中需要"rs.QueryRows(&tblog)"就行了  --tblog是一个Tb_log对象
 * 参数:表名,当前页数,页面大小,条件(查询条件,格式为 " and name='zhifeiya' and age=12 ")
 */
func GetPagesInfo(tableName string, currentpage int, pagesize int, conditions string) (int, int, orm.RawSeter) {
	if currentpage <= 1 {
		currentpage = 1
	}
	if pagesize == 0 {
		pagesize = 20
	}
	var rs orm.RawSeter
	o := orm.NewOrm()
	var totalItem, totalpages int = 0, 0                                                          //总条数,总页数
	o.Raw("SELECT count(*) FROM " + tableName + "  where 1>0 " + conditions).QueryRow(&totalItem) //获取总条数
	if totalItem <= pagesize {
		totalpages = 1
	} else if totalItem > pagesize {
		temp := totalItem / pagesize
		if (totalItem % pagesize) != 0 {
			temp = temp + 1
		}
		totalpages = temp
	}
	rs = o.Raw("select *  from  " + tableName + "  where id >0 " + conditions + " LIMIT " + con.Itoa((currentpage-1)*pagesize) + "," + con.Itoa(pagesize))
	return totalItem, totalpages, rs
}

/**
* 返回总记录条数,总页数,当前页面数据,分页html
* 根据分页选项,生成分页连接 下面是一个实例:
    func (this *MainController) Test() {
       var po util.PageOptions
       po.EnablePreNexLink = true
       po.EnableFirstLastLink = true
       po.LinkItemCount = 7
       po.TableName = "help_topic"
       cp, _ := this.GetInt("pno")
       po.Currentpage = int(cp)
       _,_,_ pager := util.GetPagerLinks(&po, this.Ctx)
       this.Data["Email"] = html.HTML(pager)
       this.TplNames = "test.html"
   }
*/
func GetPagerLinks(po *PageOptions, ctx *context.Context) (int, int, orm.RawSeter, html.HTML) {
	var str string = ""
	totalItem, totalpages, rs := GetPagesInfo(po.TableName, po.Currentpage, po.PageSize, po.Conditions)
	po = setDefault(po, totalpages)
	DealUri(po, ctx)
	if totalpages <= po.LinkItemCount { //总页数<10
		str = fun1(po, totalpages) //显示完全  12345678910
	} else if totalpages > po.LinkItemCount { //总页数>10
		if po.Currentpage < po.LinkItemCount {
			str = fun2(po, totalpages) //123456789...200
		} else {
			if po.Currentpage+po.LinkItemCount < totalpages { //最后10页前面
				str = fun3(po, totalpages)
			} else {
				str = fun4(po, totalpages)
			}
		}
	}
	return totalItem, totalpages, rs, html.HTML(str)
}

/**
 * 处理url,目的是保存参数
 */
func DealUri(po *PageOptions, ctx *context.Context) {
	uri := ctx.Request.RequestURI
	var rs string
	if strings.Contains(uri, "?") {
		arr := strings.Split(uri, "?")
		rs = arr[0] + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second())
		arr2 := strings.Split(arr[1], "&")
		for _, v := range arr2 {
			if !strings.Contains(v, po.ParamName) {
				rs += "&" + v
			}
		}
	} else {
		rs = uri + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second())
	}
	po.Href = rs
}

/**
 * 1...197 198 199 200
 */
func fun4(po *PageOptions, totalpages int) string {
	var rs string = ""
	rs += getHeader(po, totalpages)
	rs += "
  • " + con.Itoa(1) + "
  • " rs += "
  • ...
  • " for i := totalpages - po.LinkItemCount; i <= totalpages; i++ { if po.Currentpage != i { rs += "
  • " + con.Itoa(i) + "
  • " } else { rs += "
  • " + con.Itoa(i) + "(current)
  • " } } rs += getFooter(po, totalpages) return rs } /** * 1...6 7 8 9 10 11 12 13 14 15... 200 */ func fun3(po *PageOptions, totalpages int) string { var rs string = "" rs += getHeader(po, totalpages) rs += "
  • " + con.Itoa(1) + "
  • " rs += "
  • ...
  • " for i := po.Currentpage - po.LinkItemCount/2 + 1; i <= po.Currentpage+po.LinkItemCount/2-1; i++ { if po.Currentpage != i { rs += "
  • " + con.Itoa(i) + "
  • " } else { rs += "
  • " + con.Itoa(i) + "(current)
  • " } } rs += "
  • ...
  • " rs += "
  • " + con.Itoa(totalpages) + "
  • " rs += getFooter(po, totalpages) return rs } /** * totalpages > po.LinkItemCount po.Currentpage < po.LinkItemCount * 123456789...200 */ func fun2(po *PageOptions, totalpages int) string { var rs string = "" rs += getHeader(po, totalpages) for i := 1; i <= po.LinkItemCount+1; i++ { if i == po.LinkItemCount { rs += "
  • ...
  • " } else if i == po.LinkItemCount+1 { rs += "
  • " + con.Itoa(totalpages) + "
  • " } else { if po.Currentpage != i { rs += "
  • " + con.Itoa(i) + "
  • " } else { rs += "
  • " + con.Itoa(i) + "(current)
  • " } } } rs += getFooter(po, totalpages) return rs } /** * totalpages <= po.LinkItemCount * 显示完全 12345678910 */ func fun1(po *PageOptions, totalpages int) string { var rs string = "" rs += getHeader(po, totalpages) for i := 1; i <= totalpages; i++ { if po.Currentpage != i { rs += "
  • " + con.Itoa(i) + "
  • " } else { rs += "
  • " + con.Itoa(i) + "(current)
  • " } } rs += getFooter(po, totalpages) return rs } /** * 头部 */ func getHeader(po *PageOptions, totalpages int) string { var rs string = "" return rs } /** * 设置默认值 */ func setDefault(po *PageOptions, totalpages int) *PageOptions { if len(po.FirstPageText) <= 0 { po.FirstPageText = "首页" } if len(po.LastPageText) <= 0 { po.LastPageText = "尾页" } if len(po.PrePageText) <= 0 { po.PrePageText = "上一页" } if len(po.NextPageText) <= 0 { po.NextPageText = "下一页" } if po.Currentpage >= totalpages { po.Currentpage = totalpages } if po.Currentpage <= 1 { po.Currentpage = 1 } if po.LinkItemCount == 0 { po.LinkItemCount = 10 } if po.PageSize == 0 { po.PageSize = 20 } if len(po.ParamName) <= 0 { po.ParamName = "pno" } return po }

    声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

    【PHP】通过搜索(百度,微信等)抓取搜索内容

    Continue Read..

    现在有个需求 就是抓取指定搜索的页面 然后把标题和链接单独抓出来存数据库

    比如抓取百度,微信,论坛等

    之前一直都觉得要用正则写,写了几天都没写出来太TMD蛋疼了,突然搜索发现了

    $html = file_get_contents($url);

    $dom = new DOMDocument();

    @$dom->loadHTML($html);

    $xpath = new DOMXPath($dom);

    $hrefs = $xpath->evaluate("/html/body//a");

    这个函数  用于抓取xml等数据的 按指定格式  

    然后我就写了一个万能抓取的方法

    $url = "http://weixin.sogou.com/weixin?query=%E6%B5%8B%E

    $html = file_get_contents($url);

    $dom = new DOMDocument();

    @$dom->loadHTML($html);

    $xpath = new DOMXPath($dom);

    $hrefs = $xpath->evaluate("/html/body//a");

    // var_dump($hrefs);die;

    // $hrefs = $xpath->evaluate('/html/body//a');

     

    $arr = array();

     

    for ($i = 0; $i < $hrefs->length; $i++) {

    $href = $hrefs->item($i);

    // var_dump($href);

    $url = $href->getAttribute('href');

    // var_dump(strstr($url,"highlight"));

     

    if(strstr($url,"art.jsp") !== false && !empty($href->nodeValue)){

    $arr[$i]['title'] = $href->nodeValue;

    $arr[$i]['url'] = $url;

    }

    // if($i>100){

    // break;

    // }

    // echo $url.'<br />';

    }

    var_dump($arr);8%AF%95&fr=sgsearch&ie=utf8&type=2&w=01019900&sut=687&sst0=1442893595750&lkt=0%2C0%2C0";

    声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

    【YII2】自带组件发邮件

    Continue Read..

    首先在web.php components 里面修改mailer

     

         'mailer' => [

        'class' => 'yii\swiftmailer\Mailer',

        'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件

        'transport' => [

        'class' => 'Swift_SmtpTransport',

        'host' => 'smtp.163.com',

        'username' => '你的邮箱',

        'password' => '你的密码',

        'port' => '25',

    //     'encryption' => 'tls',

        ],

        'messageConfig'=>[

        'charset'=>'UTF-8',

        'from'=>['你的邮箱=>'邮箱名称']

    ],

    ],


    然后调用邮箱组件

    $mail = Yii :: $app -> mailer -> compose ( );

    $mail -> setTo (['邮箱','邮箱']);

    $mail -> setSubject ( '标题');

    // $mail->setTextBody('zheshisha '); //发布纯文字文本

    $mail -> setHtmlBody ( '内容'); // 发布可以带html标签的文本

    $mail -> send ( );

     

    声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

    【Jquery】下拉框问题

    Continue Read..
      // 全选
      function btnCheckAll(){
           //$("input:[name = 'menuid[]']:checkbox").attr("checked",'true');
           $('input[type=checkbox]').attr('checked', true);
      }

       // 全不选
      function btnCheckNone(){
     $('input[type=checkbox]').removeAttr("checked");
          //$("input:[name = 'menuid[]']:checkbox").removeAttr("checked");
      }

    声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

    [转载]mysql分组取每组前几条记录(排名) 附group by与order by的研究

    Continue Read..

    原文链接:http://www.cnblogs.com/mo-beifeng/archive/2012/02/07/2341886.html


    --按某一字段分组取最大(小)值所在行的数据

    复制代码
    /*
    数据如下:
    name val memo
    a    2   a2(a的第二个值)
    a    1   a1--a的第一个值
    a    3   a3:a的第三个值
    b    1   b1--b的第一个值
    b    3   b3:b的第三个值
    b    2   b2b2b2b2
    b    4   b4b4
    b    5   b5b5b5b5b5

    */  

    复制代码

     

    --创建表并插入数据:

     

    复制代码
    create table tb(name varchar(10),val int,memo varchar(20))
    insert into tb values('a',    2,   'a2(a的第二个值)')
    insert into tb values('a',    1,   'a1--a的第一个值')
    insert into tb values('a',    3,   'a3:a的第三个值')
    insert into tb values('b',    1,   'b1--b的第一个值')
    insert into tb values('b',    3,   'b3:b的第三个值')
    insert into tb values('b',    2,   'b2b2b2b2')
    insert into tb values('b',    4,   'b4b4')
    insert into tb values('b',    5,   'b5b5b5b5b5')

    go 

    复制代码

     --一、按name分组取val最大的值所在行的数据。

    复制代码
     --方法1:
    select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
    --方法2:
    select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
    --方法3:
    select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
    --方法4:
    select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
    --方法5
    select a.* from tb a where 1 > (select count(*from tb where name = a.name and val > a.val ) order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          3           a3:a的第三个值
    b          5           b5b5b5b5b5

    */ 

    复制代码

     本人推荐使用1,3,4,结果显示1,3,4效率相同,2,5效率差些,不过我3,4效率相同毫无疑问,1就不一样了,想不搞了。

    --二、按name分组取val最小的值所在行的数据。

    复制代码
    --方法1:
    select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
    --方法2:
    select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
    --方法3:
    select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
    --方法4:
    select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
    --方法5
    select a.* from tb a where 1 > (select count(*from tb where name = a.name and val < a.val) order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          1           a1--a的第一个值
    b          1           b1--b的第一个值

    */ 

    复制代码

     --三、按name分组取第一次出现的行所在的数据。

    复制代码
    select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          2           a2(a的第二个值)
    b          1           b1--b的第一个值

    */  

    复制代码

     

    --四、按name分组随机取一条数据。
    复制代码
    select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          1           a1--a的第一个值
    b          5           b5b5b5b5b5

    */ 

    复制代码

     --五、按name分组取最小的两个(N个)val

    复制代码
    select a.* from tb a where 2 > (select count(*from tb where name = a.name and val < a.val ) order by a.name,a.val
    select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
    select a.* from tb a where exists (select count(*from tb where name = a.name and val < a.val having Count(*< 2order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          1           a1--a的第一个值
    a          2           a2(a的第二个值)
    b          1           b1--b的第一个值
    b          2           b2b2b2b2

    */ 

    复制代码

     --六、按name分组取最大的两个(N个)val

    复制代码
    select a.* from tb a where 2 > (select count(*from tb where name = a.name and val > a.val ) order by a.name,a.val
    select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val descorder by a.name,a.val
    select a.* from tb a where exists (select count(*from tb where name = a.name and val > a.val having Count(*< 2order by a.name
    /*
    name       val         memo                
    ---------- ----------- --------------------
    a          2           a2(a的第二个值)
    a          3           a3:a的第三个值
    b          4           b4b4
    b          5           b5b5b5b5b5

    */  

    复制代码

     

    --七,假如整行数据有重复,所有的列都相同(例如下表中的第5,6两行数据完全相同)。
            按name分组取最大的两个(N个)val
    复制代码
     1  /*
     2 数据如下:
     3 name val memo
     4 a    2   a2(a的第二个值)
     5 a    1   a1--a的第一个值
     6 a    1   a1--a的第一个值
     7 a    3   a3:a的第三个值
     8 a    3   a3:a的第三个值
     9 b    1   b1--b的第一个值
    10 b    3   b3:b的第三个值
    11 b    2   b2b2b2b2
    12 b    4   b4b4
    13 b    5   b5b5b5b5b5
    14 
    15 */ 
    16

     

    复制代码


     

     附:mysql “group by ”与"order by"的研究--分类中最新的内容

     这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况

    这种需求,我想很多人都遇到过。下面是我模拟我的内容表

    我现在需要取出每个分类中最新的内容
    select * from test group by category_id order by `date`

    结果如下

    明显。这不是我想要的数据,原因是msyql已经的执行顺序是

    引用

    写的顺序:select ... from... where.... group by... having... order by..
    执行顺序:from... where...group by... having.... select ... order by...

    所以在order by拿到的结果里已经是分组的完的最后结果。
    由from到where的结果如下的内容。

    到group by时就得到了根据category_id分出来的多个小组


    到了select的时候,只从上面的每个组里取第一条信息结果会如下

    即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
    回到我的目的上 --分类中最新的信息
    根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法
    1,where+group by(对小组进行排序)
    2,从form返回的数据下手脚(即用子查询)

    由where+group by的解决方法
    对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。
    select group_concat(id order by `date` desc) from `test` group by category_id


    再改进一下
    select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc



    子查询解决方案
    select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc


     

     

    【PHP】Paypal支付和IPN(YII2版)

    Continue Read..

    首先去paypal沙盒申请一个账号 并且申请一个虚拟商家账号和一个买家账号

    沙盒地址  https://developer.paypal.com/developer/applications/

    点击查看原图点击查看原图




    然后设置 IPN  

     

    登陆  https://www.sandbox.paypal.com/  用商家账号

     

    点击查看原图点击查看原图

     

    设置你 IPN的回调地址 比如  https://xxx.com/ipn

    IPN代码参考 https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php

     

     

    支付实现 参考代码网址  https://github.com/paypal/PayPal-PHP-SDK/wiki/Installation

    官网示例代码     https://github.com/paypal/rest-api-sample-app-php

     

    下载YII2  然后 composer 安装 paypal  具体的百度 我也会把全部代码上传附件  

    附件 有3个 脚本是直接配置可以运行的(官方代码)   YII2是我写的    另一个是数据库 

    声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权