Mysql按指定顺序排序的两种写法

SELECT `ID` FROM wp_posts WHERE `ID` in (1,2,3,4,5) ORDER BY FIELD(`ID`,5,4,3,1,2); // 纯数字字段不用处理引号,比较好拼接
SELECT `ID` FROM wp_posts WHERE `ID` in (1,2,3,4,5) ORDER BY FIND_IN_SET(`post_title`,'A,B,C,D,E'); // 一个引号全包住,搞定字符值字段
 
-- 注意:第一个参数不能是字符串,否则不起作用
-- 性能差异
SELECT id FROM cbd_hots WHERE id in (155,154) ORDER BY FIELD(`id`,154,155); // 纯数字字段不用处理引号,比较好拼接

亲测有效!

针对tp5中的这样的写法[orderRaw 代替order  ] 请使用orderRaw方法替代order

有业务需求如下:

select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
但是也可以写成这样

->order("field(id,3,6,9,1,2,5,8,7)")
但是官方文档说了,当你的order排序中使用了SQL函数的时候,请使用orderRaw方法替代order 。

实践有效:

return Db::connect(config('database.sqla'))->name("hots")->where("id in (".$hots_ids.")")->orderRaw("field(id,".$hots_ids.")")->select();

 

 

SQL用了Union后的排序问题

有小伙伴反映:

最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了。

 

SELECT a.id,a.username,a.mobile,a.time,a.leader,a.time
FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader 
	FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1 
	UNION ALL 
	SELECT leadorderid,username,mobile,time,null 
	FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
) AS a 
ORDER BY a.time DESC

注意事项:

1、必须声明临时表;

2、必须使用别名

js关闭浏览器的tab页(兼容)

由于在脚本中使用了 window.close(), 当前非弹出窗口在最新版本的chrome和firefox里总是不能关闭,而在 IE中是可以关闭的 。

      在console中弹出提示”Scripts may close only the windows that were opened by it” (脚本只能关闭它所打开的窗口),[如下图所示] , 不明白是什么原因。

首先,什么是非弹出窗口呢?

      非弹出窗口,即是指(opener=null 及 非window.open()打开的窗口,比如URL直接输入的浏览器窗体, 或由其它程序调用产生的浏览器窗口)。

其次,window.close() 怎么理解呢?

 

由 https://developer.mozilla.org/en-US/docs/Web/API/window.close 可知:

Closes the current window, or the window on which it was called.
When this method is called, the referenced window is closed.

This method is only allowed to be called for windows that were opened by a script using thewindow.open() method. If the window was not opened by a script, the following error appears in the JavaScript Console: Scripts may not close windows that were not opened by script.

Examples

Closing a window opened with window.open()

This example demonstrates how to use this method to close a window opened by script callingwindow.open().

<script type="text/javascript">
//Global var to store a reference to the opened window
var openedWindow;

function openWindow()
{
  openedWindow = window.open('moreinfo.htm');
}

function closeOpenedWindow()
{
  openedWindow.close();
}
</script>

Closing the current window

When you call the window object’s close() method directly, rather than calling close() on a windowinstance, the browser will close the frontmost window, whether your script created that window or not.

<script type="text/javascript">
function closeCurrentWindow()
{
  window.close();
}
</script>

在某些实际应用中,window.close() and self.close() 是不能关闭非弹出窗口(opener=null及非window.open()打开的窗口)。

方案一【推荐,亲身测试有效!!】:

function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }

方案二:

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

参考:https://www.cnblogs.com/exe19/p/5546719.html

 

空链接是使用javascript:void(0)还是使用#none

通过微信推送链接。在ios系统中(android显示正常),微信内页打开链接后,点击页面的一个按钮,页面被重新加载了,这时才可以对页面进行其它操作。

原因:a标签的引起的

<a href="#none" class="btn" id="btn"></a>

href=“#none” 这是本来是使用空链接,并使用JS控制ID来给按钮添加功能,但是在微信中会导致第一次点击按钮时页面出现重新加载现象……

解决办法如下:

<a href=”javascript:void(0);” class="btn" id="btn"></a>

注:javascript:void(0) 链接无返回值。

当a标签href为空链接,写法为javascript:void(0),也不是说使用href="#none"就是错误的,在pc端上使用也是没有问题的,href="javascript:void(0);是专业化的一种表现,更值得我们去写,毕竟它解决微信中存在的一个bug...

新手理解HTML、CSS、javascript之间的关系

最准确的网页设计思路是把网页分成三个层次,即:结构层(HTML)、表示层(CSS)、行为层(Javascript)。

 

一、HTML、CSS、JavaScript简介及简单分工

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。

1、什么是HTML(超文本标记语言 Hyper Text Markup Language),HTML 是用来描述网页的一种语言。
2、CSS(层叠样式表 Cascading Style Sheets),样式定义如何显示 HTML 元素,语法为:selector {property:value} (选择符 {属性:值})
3、JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。

对于一个网页,HTML定义网页的结构,CSS描述网页的样子,JavaScript设置一个很经典的例子是说HTML就像 一个人的骨骼、器官,而CSS就是人的皮肤,有了这两样也就构成了一个植物人了,加上javascript这个植物人就可以对外界刺激做出反应,可以思 考、运动、可以给自己整容化妆(改变CSS)等等,成为一个活生生的人。如果说HTML是肉身、CSS就是皮相、Javascript就是灵魂。没有Javascript,HTML+CSS是植物人,没有Javascript、CSS是个毁容的植物人。
如果说HTML是建筑师,CSS就是干装修的,Javascript是魔术师。

二、HTML、CSS、JavaScript发展
1、HTML的版本
超文本标记语言(第一版)——在1993年6月作为互联网工程工作小组(IETF)工作草案发布(并非标准):
HTML 2.0——1995年11月作为RFC 1866发布,在RFC 2854于2000年6月发布之后被宣布已经过时
HTML 3.2——1997年1月14日,W3C推荐标准
html 5
html 5
HTML 4.0——1997年12月18日,W3C推荐标准
HTML 4.01(微小改进)——1999年12月24日,W3C推荐标准
HTML 5——2014年10月28日,W3C推荐标准[4]

现在我们只说HTML 4.01和HTML5,因为2000年国际万维网联盟(W3C)公布发行了XHTML 1.0版本。XHTML 1.0是一种在HTML 4.0基础上优化和改进的的新语言,目的是基于XML应用。而XHTML 与 HTML 4.01 几乎是相同的,HTML从最初发展到XHTML的过程中变得更加的严谨,更加的灵活,与CSS结合的更好。原则上说现在能看到的大部分网页是使用HTML4或者HTML5这两个版本的。

总结 html 原本最终是要过渡到xml的, 于是有了html->xhtml[html4]->xml 但是过渡不成功。所以直接有了html5。

HTML5
它是对HTML5的一次重大的修改,虽然HTML5 标准还在制定中,但不能阻碍其势不可挡的脚步。

2、CSS的版本(Level)

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

1996年W3C正式推出了CSS1;
1998年W3C正式推出了CSS2;
CSS2.1是W3C现在正在推荐使用的;
CSS3现在还处于开发中。

3、JavaScript的前世今生

JavaScript一种直译式脚本语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,即:JavaScript是由客户端的浏览器解释执行的,所以在谈JavaScript的历史之前我们要先说一下浏览器,最早的web浏览器是创建于1991年的WorldWideWeb,后来改名为Nexus,之后出现了各类浏览器,直到1994年,网景公司(Netscape)发布了Navigator浏览器0.9版,这是历史上第一个比较成熟的网络浏览器,随后的1995年微软推出了IE浏览器,从此掀起了浏览器大战,微软采取操作系统捆绑IE浏览器,最终获得压倒性胜利,战争失利的Netscape在之后被收购、合并、解散。之后一段时间IE独领风骚,之后被Opera,Safari,Firefox,Chrome陆续瓜分掉一些市场份额,改变了一家独大的局面。

但是谈到JavaScript的历史,必须提到一个公司和一个人,那就是Netscape公司及其员工Brendan Eich,网景公司在发布了Navigator之后,急于解决浏览器与用户交互这个问题,Javascript之父Brendan Eich只用了10天的时间发明了livescript(让我辈情何以堪),由于网景高层是java的粉丝,或者说为了抱上当时热炒的java的大腿,livascript更名为javascript,Brendan Eich他的思路是:
      (1)借鉴C语言的基本语法;

  (2)借鉴Java语言的数据类型和内存管理;

  (3)借鉴Scheme语言,将函数提升到”第一等公民”(first class)的地位;

  (4)借鉴Self语言,使用基于原型(prototype)的继承机制。
所以,Javascript语言实际上是两种语言风格的混合产物—-(简化的)函数式编程+(简化的)面向对象编程。
Javascript 1.0获得了巨大的成功,Netscape随后推出了1.1,之后作为竞争对手的微软在自家的 IE3 中加入了名为 JScript (名称不同是为了避免侵权)的JavaScript实现。由此JavaScript 的规范化被提上日程,1997年,以 JavaScript1.1 为蓝本的建议被提交给了 欧洲计算机制造商协会 (ECMA),ECMA牵头经过数月的努力完成了 ECMA-262 ——定义了一种名为 ECMAScript 的新脚本语言的标准。

虽然 JavaScript 和 ECMAScript 通常被人用来表达相同的意思,但 JavaScript 的含义去比 ECMA-262 中规定的多得多。

一个完整的 JavaScript 实现应由三个部分组成:

(1)核心(ECMAScript), 描述了该语言的语法和基本对象。

(2)文档对象模型(DOM),描述处理网页内容的方法和接口。

(3)浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

 

 

H5的音视频自动播放问题

1. 背景和问题由来

(chrome浏览器)项目中用到了一个短视频页面加载动画,一开始视频无声正常。接着需求变更,让视频动画加上一个背景音乐,然后就不能播放了。然后开始了各种尝试和api文档查询。为何一个带声音的视频文件在chrome浏览器里无法有声自动播放呢?
经过调研和尝试,发现:

  • video标签的有声自动播放在iefirefox以及低版本的chrome浏览器都能正常。
  • video标签的有声自动播放在高版本的chrome浏览器里,第一次播放正常,第二次和之后不正常。强刷新(清理浏览器缓存)后又正常。
    video标签用js动态加载,本页面的url变化后,视频正常播放;不变化视频不能正常播放。有点像重定向的可播放的味道。

2.调研发现

首先看看MDN对video标签的相关属性的描述,你会发现,对autoplay的描述里,多了一些关于chrome浏览器的补充描述:
In some browsers (e.g. Chrome 70.0) autoplay doesn't work if no muted attribute is present.
大致意思就是:静音播放。
然后,查询些其他资料,发现chrome的版本更新里,也有相关描述,连接如下:
https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
不能翻墙的可以直接看下面截图:

里面也介绍了chrome浏览器对视频播放的一些限制:静音自动播放;手动触发播放等等。
查询了一下,发现chrome浏览器之所以加这种限制,也是为了解决用户痛点:各种自动播放视频广告。如果是移动端上自动播放,那么流量就是用户自己承担了,而用户还不自知。只能说该浏览器在关注用户体验方面走在了其他浏览器厂商的前面。

3.解决方法

暂时只有2种方式:

  • 静音自动播放:<video src="xxx.mp4" autoplay muted></video>
  • 非静音手动触发播放。

tp5中,如何实现js 等特殊字符自动html实体化。

一、application/config.php中设置如下

// 默认全局过滤方法 用逗号分隔多个
‘default_filter’ => ‘trim,htmlspecialchars’,

二、KindEditor中,不要做任何特殊处理!!切忌。

<textarea name="content" class="input" style="height:450px; border:1px solid #ddd;">{$arr.content}</textarea>

三、非textarea或者 input显示中。记得htmlspecialchars_decode哦。

<?php echo htmlspecialchars_decode($con);?>

四、非textarea涉及到去除html标签,截取的,请按如下格式(其中 deleteHtmlTags为定义的去html标签函数)。

<?php 
                $con=pagecontent(1)['content'];
                echo deleteHtmlTags(htmlspecialchars_decode($con));?>