--每个帖子总的likes

  select Post.PostId,Post.PostTitle,

         count(*) totalLikes

  from dbo.ForumPosts Post,Likes,

       dbo.ForumMembers Members

  where Match(Members-(Likes)->Post)

  group by PostId,PostTitle

  --每个成员总的点赞数select LikedMembers.MemberId,LikedMembers.MemberName,

         count(*) totalLikes

  from dbo.ForumMembers Members,Likes,

       dbo.ForumMembers LikedMembers

  where Match(Members-(Likes)->LikedMembers)

  group by LikedMembers.MemberId,

           LikedMembers.MemberName

点击这里查看audio和video的性能:HTML5
Audio HTML5
Video

  1. 咱俩寻找每个记录的蝇头只有,发帖和还原,因此我们用在FROM子句被引用两不成ForumPosts’表,以此地方可以运用局部发出含义之号:
<canvas id="myCanvas" width="300" height="200">

你的浏览器是老古董了,不支持canvas,扔了吧.

</canvas>

 

创一个canvas元素非常简单:

--  Peter回复的所有帖子

   SELECT distinct RepliedPost.PostID,RepliedPost.PostTitle,

           RepliedPost.PostBody

   FROM dbo.ForumPosts ReplyPost, Reply_To, dbo.ForumPosts RepliedPost,

        dbo.ForumMembers Members,Written_By

   WHERE MATCH(Members<-(Written_By)-ReplyPost-(Reply_To)->RepliedPost)

   and Members.MemberName='Peter'

  -- Peter发的所有帖子

   SELECT ReplyPost.PostID,ReplyPost.PostTitle,ReplyPost.PostBody,

          RepliedPost.PostId ReplyTo

   FROM dbo.ForumPosts ReplyPost, Reply_To, dbo.ForumPosts RepliedPost,

        dbo.ForumMembers Members,Written_By

   WHERE MATCH(Members<-(Written_By)-ReplyPost-(Reply_To)->RepliedPost)

   and Members.MemberName='Peter'

统计 1

select RepliedPost.PostId,RepliedPost.PostTitle,

   ReplyPost.PostId as ReplyId, ReplyPost.PostTitle as ReplyTitle

  from Forum.ForumPosts ReplyPost, Forum.ForumPosts RepliedPost

  where ReplyPost.PostId=RepliedPost.ReplyTo

即浏览器对音频文件的支撑情况:

 

Canvas是HTML5丁尽给丁可望的特性有,目前多数的Web浏览器的支持(Chrome,Firefox,Safari,Opera支持,IE8不支持),canvas可以利用为游戏设计、增强图形用户界面。

SELECT Members.MemberId, Members.MemberName,

         RepliedPost.PostId RepliedId,count(*) as TotalReplies

  FROM   dbo.ForumPosts ReplyPost, Reply_To, dbo.ForumPosts RepliedPost,

       Written_By,dbo.ForumMembers Members

  WHERE MATCH(Members<-(Written_By)-ReplyPost-(Reply_To)->RepliedPost)

  GROUP BY MemberId,MemberName,RepliedPost.PostId

  Having count(*) >1

 

 

使得人咋舌的canvas动画效果:8 Simply Amazing HTML5 Canvas and Javascript
Animations

  1. 这些查询好相似,当然MATCH的语法更便于掌握。
  2. 施行完毕上面语句询问结果如下:

开发人员开发过程被得注意的是:为了Javascript中能应用canvas对象,需要被元素设置ID;通常也如安装其惊人与幅度;为了网站的友好性,需要吃元素中上加不支持的文字说明,在不支持canvas的浏览器中受用户提醒。

 

统计 2

 

<audio controls="controls">

<source src="song.ogg" type="audio/ogg" />

<source src="song.mp3" type="audio/mpeg" />

您的浏览器不支持音频标签!
with root as

  ( select LeafPost.$node_id as node_id,LeafPost.PostId,

           LeafPost.PostTitle

     from dbo.ForumPosts LeafPost

     where LeafPost.PostId=3  -- Single post

  union all

     select RepliedPost.$node_id as node_id,RepliedPost.PostId,

            RepliedPost.PostTitle

     from dbo.ForumPosts RepliedPost, Reply_to, root

     where root.node_id=Reply_to.$from_id

           and Reply_to.$to_id=RepliedPost.$node_id

  )

  select root.PostId,root.PostTitle,

         RepliedPost.PostId ParentPostId

  from root

  left join reply_to

       on root.node_id=reply_to.$from_id

  left join dbo.ForumPosts RepliedPost

       on reply_to.$to_id=RepliedPost.$node_id
Format IE8 Firefox 3.6 Opera 10.5 Chrome 5.0 Safari 5.0
Ogg Vorbis No Yes Yes Yes No
MP3 No No No Yes Yes
Wav No Yes Yes No Yes
  1. 接下来,修改MATCH子句,‘ReplyMember’亟需关联‘ReplyPost’,但什么去处理是涉及使休影响外涉嫌?需要因此不同的方法来实现:

    WHERE MATCH(ReplyMember<-(ReplyWritten_By)-ReplyPost-(Reply_to)->RepliedPost-(RepliedWritten_by)->RepliedMember)

Canvas的出现颠覆了民俗在Web应用被画图的章程,传统的图腾方式发出以服务器端先画好图片,再管图片发至浏览器中,或者用Flash,还发生因此第三着插件。但是这些主意都未是原生的HTML,
HTML5
canvas提供了通过javascript绘制图形的不二法门,方法简便而功能强大,作为开发工程师可以采用canvas
API随心所欲地控制图。

MATCH语法只是容我们干三个或另行多之实业(比如简单单节点和一个干)。当我们无非想干中有数独之时刻,只待一个健康的连要子查询。如上面的讲话一样。

HTML5 Video Player
  1. 这语法很有意思:“-”破折号表示边的$From_id字段表示关系,然后“->”破折号和过号用边的$To_id字段表示关系。
  2. 因掌握那个别名有reply,那个别名有replied
    post,我们得构建一个询问字段列表:

    FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost

    WHERE MATCH(ReplyPost-(Reply_to)->RepliedPost)

 

-- Posts 、members 和replies

   SELECT RepliedPost.PostId,RepliedPost.PostTitle,RepliedMember.MemberName,

   ReplyPost.PostId as ReplyId, ReplyPost.PostTitle as ReplyTitle

      FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost,

        dbo.ForumMembers RepliedMember, Written_By RepliedWritten_By

   WHERE MATCH(ReplyPost-(Reply_to)->RepliedPost-(RepliedWritten_by)->RepliedMember)

HTML5看作晚辈的web开发规范,其特点都日趋地涌出在主流的浏览器被,这种新的HTML将会晤被浏览器不必再度依赖Flash、QuickTime、Silverlight等插件,也简化了原先需要大量JS才能够上的成效。虽然HTML5尚以谈论进程被,但是那个优越的性状都落了豪门之承认,各大浏览器厂商,一些闻名的始末发布网站为还是主动地推向,
尤其是将揭晓之IE9会完全支持HTML5。作为Web开发人员的我们,需要举行的是:如何拿HTML5转化为各种Web应用,如何就现有的Web应用接入至HTML5。下面用介绍作为Web开发人员必须理解之HTML5表征,以及各级特性可能的使场景。

 

点击这里翻一个canvas显示的HelloWorld:Canvas-HelloWorld

应用CTE递归语法,我们可以据此同种植树结构检索一个帖子的所有回复。如果下正规的语法不可知在找帖子1的时段找贴子3,因为3凡针对性2之还原,而2凡指向1底复原。使用CTE.当查询帖子1的备回复时能够寻找贴子3。代码如下:

Format IE8 Firefox 3.6 Opera 10.5 Chrome 5.0 Safari 5.0
Ogg No Yes Yes Yes No
MPEG 4 No No No Yes Yes

咱俩也足以创造有重复好玩之询问,例如,查找这些点赞并回复的人数,如下:

不用怀疑,这张3D的美术就是之所以canvas画下的。

总结

  透过上述构建以祈求数据模式下之询问与涉及,对比了常规语词以及以关乎模式下之平等查询,不难察觉无当易读性,逻辑理解上或者于性及且发出老特别提高。当然就只是首先个本子,所以难免出多问题,
下一致首自开口介绍这本子在的同样有的题目。

</audio>

<video width="320" height="240" controls="controls">

<source src="movie.ogg" type="video/ogg" />

<source src="movie.mp4" type="video/mp4" />

您的浏览器不支持视频标签!

</video>

统计每篇帖子的回复数

创建audio和vedio元素:

 

 

 

充分cool的游戏使用:Best HTML5 Canvas
Games

以斯话中我们统计了各级一样篇回复的数量,但是只在一个界中,并无是当全部还原的造结构中。

即浏览器对视频文件的支持:

  1. 在关系型模型中一致效果的查询如下:

1, 用Canvas绘制图形

  1. 在意这个符号“<-”与前面的反倒方向,但是意义是一样的:一个于边表的$to_id以及节点表的干。
  2. 终极,还待多写在过来的成员姓名,代码如下:

    — Posts and members and their replies and members

    SELECT RepliedPost.PostId, RepliedPost.PostTitle,RepliedMember.MemberName,

    ReplyPost.PostId as ReplyId, ReplyPost.PostTitle as ReplyTitle,

    ReplyMember.MemberName [ReplyMemberName]

      FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost,
    
        dbo.ForumMembers RepliedMember, Written_By RepliedWritten_By,
    
        dbo.ForumMembers ReplyMember, Written_By ReplyWritten_By
    
      WHERE MATCH(ReplyMember<-(ReplyWritten_By)-ReplyPost-(Reply_to)->RepliedPost-(RepliedWritten_by)->RepliedMember)
    

产图备受得以看到各级大浏览器与多媒体分享站点支持的格式:

FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost

2,多媒体音频和视频

注意,对于‘Member’节点使用了少数坏当同一个MATCH表达式中。这形成了同一种植过滤:点赞并且产生卷土重来的分子,需要以‘LikedPost’和‘ReplyPost’遭都发出记录才足以。

 

  1. 尽管我们会选其他别名,但是在处理图对象时不过好选择发生义的名。
  2. 咱得“posts”之间的涉及,而这关系就是说明Reply_to’。语法如下:

点击这里翻音频和视频标签在浏览器被的法力:Audio

Vedio

哪怕开发者而言,目前底情状是,我们需要准备多只版本的板和视频,并将文件路径都加加到audio和vedio中,web浏览器会超越了不支持之格式,另外,最好长针对无支持audio和vedio的浏览器的契提示或其它多媒体播放方式。

Audio和Vedio是个别独简单而强大的竹签,目前国内外都产生差不多单多媒体分享网站开始支持还是测试HTML5。

一般来说是一对HTML5 Vedio体验资源:

Video showcase from
Apple

Google 联合 Arcade Fire 推出了一个 HTML5
互动电影: The Wilderness
Downtown,点击这里好进入该当
Chrome Experiment 的页面

T-SQL
带为图表查询有初的语法。在SELECT语句被我们来有奇特之告知句来关联点和限。让咱们来排练一些,构建查询语句检索发帖和还原,如下:

<audio>和<video>是首批添加到HEML5规范着之符号。它们的入使得web浏览器会为同种更便宜之计来拍卖音频和视频文件,结束了于web浏览器中装置广播插件的历史。比较让人头疼的是,各大浏览器厂商对板和视频格式有重点的龃龉,Firefox坚持用开的ogg标准,而Safari则期望是MP3和MP4的科班,这便导致了我们付出过程遭到需要提供多只版本的节奏和视频文件来配合浏览器。

回帖个一个帖子多次的成员:

YouTube – Broadcast Yourself(哦,对不起,这是个未在的网站)

3,Web存储

乘Web应用的升华,需要在客户端存储的现象更多,传统的客户端存储方发生cookie、Firefox下起globalStorage、Flash在插件的支撑下有其和好的蕴藏方,但是这几栽方法还发生夫局限性(安全性与兼容性)。HTML5供的于客户端存储方产生:Web
Database和Web storage,Web
Database适应和客户端复杂数据的囤积,其正式还未熟,浏览器的支撑也颇有限,需要Web开发人员进一步的关爱,假如存储的是简单的数量,则可以以Web
storage方式,不占用带富,并且获得了主流浏览器的支持,包括IE8。

Web存储有三三两两种植方法:localStorage和sessionStorage,参考这里翻详尽定义,两者的别简单的话,localStorage可以永远保存数据,也就是说关闭浏览器,下次开拓浏览器还能够博得存储的数额,而sessionStorage只于时下的对话中可用。

脚的事例演示统计用户访问网站的次数:

<script type="text/javascript">
if (typeof(localStorage) == "undefined") {
document.write("你的浏览器不支持Web存储");
} else {
if (localStorage.pagecount){
localStorage.pagecount=Number(localStorage.pagecount) +1;
}
else{
localStorage.pagecount=1;
}
document.write("您已经光临本站 "+ localStorage.pagecount + " 次了.");
}
</script>

点击这里翻运行效果:Demo

支出中需要专注的凡,Web
storage有安全者的权限的,不要当里存储私密的数目,
另外,这个蕴藏的数码是匪能够超越浏览器读取的,也就是说用同种浏览器打开站点保存的多寡,用外浏览器是赢得不顶的。

尽管Web存储有诸如此类的缺陷,但是是特性使得应用程序在离线状态下呢堪正常办事,当次用处理大量底数据经常,可以避免数据频繁地于客户端与服务器端的来往,对活动设备来说,可以极大地抽流量之耗费。

此处来同等篇很好之章介绍Web存储:Web
Storage全解析

4,其他的简化了开之HTML5特点

  • 有的常用输入型:Email,url,number,date pickers等
  • 局部正经属性:contenteditable 等
  • 一些input属性:placeholder,required,autofocus,min,max,step,

此推荐两首介绍这些HTML5特征的章,请参考:公要掌握的28个HTML5特色、窍门和技艺和叫网页设计师的30只HTML5念资源

以上这些HTML5特点是眼前浏览器支持比较好的风味,也是关注度大强之HTML5特色,本文是自从一个Web开发人员的角度来掌握HTML5,目的是想有重新多的Web开发人员能赶紧地融入HTML5的开中来,最近优酷已经起运用HTML5和HTTP
Live
Streaming技术,让再多的用户可以当走平台分享多媒体,这对国内的HTML5的放大由及了积极向上的意向,微软诺IE9将完善支持HTML5,这对HTML5的加大是一个振奋人心的信。可以预见,未来几乎年HTML5用便捷地前进,作为Web开发人员,我们重应该尽早熟悉HTML5的各种风味,在项目支出过程遭到吗应又多考虑怎么行使HTML5的特性加强web应用程序的易用性和可移植性。

 

点击这里翻canvas的API:Canvas
API

 

下是部分好cool的Canvas应用:

 统计 3

 

 

根贴(主贴)的列表

  1. 当WHERE
    子句被,我们得关联有的阐发,用底这种MATCH语句来促成关系:

    FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost

    WHERE MATCH(ReplyPost-(Reply_to)->RepliedPost)

 

 统计 4

在范中检索Likes(点赞)

  1. 还要添加MATCH语句的里关系:

 

 

  1. 每当是时,可能于关系型模式中就关系的加码读取就会愈发紧,而以祈求数据模式中MATCH子句相对就爱多。让咱看一下每当图数据模式面临一些妙趣横生又有效之地方。

咱们啊可回做,在树状结构被按照顺序检索所有父贴。由于CTE不支持OUTER
join,所以要是以表面添加,代码如下:

  1. 结果集如下:

回帖给多独帖子的分子

  SELECT Member.MemberName,Member.Memberid,

         LikedPost.PostId,LikedPost.PostTitle,

         ReplyPost.PostTitle ReplyTitle

  FROM dbo.ForumPosts LikedPost, Reply_To, dbo.ForumPosts ReplyPost,

       Likes, dbo.ForumMembers Member, Written_By

  WHERE MATCH(Member-(Likes)->LikedPost<-(Reply_To)-ReplyPost-(Written_By)->Member)

看起这种写法更麻烦了解和朗诵懂。

 with root as

  ( select $node_id as node_id,RootPosts.PostId,RootPosts.PostTitle,

           1 as Level, 0 as ReplyTo

     from dbo.ForumPosts RootPosts

     where PostId=1  

  union all

     select $node_id,ReplyPost.PostId, ReplyPost.PostTitle,

            Level+1 as [Level],root.PostId as ReplyTo

     from dbo.ForumPosts ReplyPost, reply_to, root

     where ReplyPost.$node_id=reply_to.$from_id

           and root.node_id=reply_to.$to_id

  )

  select PostId,PostTitle, Level, ReplyTo

  from root

 

 

    

SELECT Members.MemberId, Members.MemberName,

         Count(distinct RepliedPost.PostId) as Total

  FROM   dbo.ForumPosts ReplyPost, Reply_To, dbo.ForumPosts RepliedPost,

         Written_By,dbo.ForumMembers Members

  WHERE  MATCH(Members<-(Written_By)-ReplyPost-(Reply_To)->RepliedPost)

  GROUP BY MemberId, Members.MemberName

  Having Count(RepliedPost.PostId) >1

 

  SELECT distinct RepliedPost.PostID,RepliedPost.PostTitle,

          RepliedPost.PostBody,

          count(ReplyPost.PostID) over(partition by RepliedPost.PostID)

              as TotalReplies

   FROM dbo.ForumPosts ReplyPost, Reply_To, dbo.ForumPosts RepliedPost

   WHERE MATCH(ReplyPost-(Reply_To)->RepliedPost)

尚可以好爱地集结信息,以得每个帖子或每个成员的终究的Likes。

  1. 结果如下所示:

长一个‘Level’字段,显示树结构。在T-SQL中生出一个略的语法,叫做CTE实现递归。但是发生一个问题,不可知用MATCH语法在一个派生表上,此时得以应用CTE。如果来必不可少,可以当CTE中使MATCH,但是反的即可怜了,有这般的范围。下面展示一下动正规的涉嫌就使用CTE来迭代,代码如下:

那当关系型模式面临代码如下:

寻找一个用户有帖子

FROM dbo.ForumPosts ReplyPost, dbo.ForumPosts RepliedPost
select Likes.MemberId,Members.MemberName

  from Forum.Likes Likes, Forum.ForumPosts Posts,

       Forum.ForumMembers Members

  where Likes.MemberId=Posts.OwnerId

   and Posts.ReplyTo=Likes.PostId

   and Members.MemberId=Likes.MemberId

 

 

  1. 随即虽得以SELECT列表中上加回帖人的名字,最终之询问如下:

追寻一个帖子中的富有回复

    上一样首简要介绍了图数据库的有些骨干内容(新认识SQL Server2017
图数据库(一)),本篇通过比关系型一些语法来反映图数据库模式之片独到之处,比如查询好,语句易理解等。

 统计 5

  1. 每当关系型模型中的呼应查询如下:

    SELECT RepliedPost.PostId,RepliedPost.PostTitle,

    ReplyPost.PostId as ReplyId, ReplyPost.PostTitle as ReplyTitle,

    RepliedMember.MemberName

    FROM Forum.ForumPosts ReplyPost, Forum.ForumPosts RepliedPost,

    Forum.ForumMembers RepliedMember

    WHERE ReplyPost.PostId=RepliedPost.ReplyTo

        and RepliedPost.OwnerId=RepliedMember.MemberId
    

 

--点赞的帖子或者被别人点赞的帖子。

  SELECT Post.PostID,Post.PostTitle,Member.MemberName

  FROM   dbo.ForumPosts Post, Likes,

         dbo.ForumMembers Member

  WHERE MATCH(Member-(Likes)->Post)

  -- 点赞的人或者被人点赞

  SELECT Member.MemberId,Member.MemberName LikeMember,

         LikedMember.MemberName LikedMemberName

  FROM dbo.ForumMembers Member, Likes, dbo.ForumMembers LikedMember

  WHERE MATCH(Member-(Likes)->LikedMember)
WHERE MATCH(ReplyPost-(Reply_to)->RepliedPost-(RepliedWritten_by)->RepliedMember)

    

SELECT Post1.PostId,Post1.PostTitle

  FROM dbo.ForumPosts Post1

  WHERE $node_id not in (select $from_id from dbo.Reply_To
  1. 尚缺回复对象的讳。像面一样增加‘ForumMembers’
     ‘Written_By’在FROM子句中:

    From dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost,

    dbo.ForumMembers RepliedMember, Written_By RepliedWritten_By,

    dbo.ForumMembers ReplyMember, Written_By ReplyWritten_By

 

询问一个因此有的音,与帖子不同,这不欲培植,要简明群:

俺们通过下不采取MATCH的话语获得有的根贴:

于图数据库模型上构建查询的优势:

或者你放在心上到上面两单查询的异,就是于亮字段上是否动DISTINCT。这个去重是坐Peter回复同一个帖子可以过同样不行。

 with root as

  ( select $node_id as node_id,RootPosts.PostId,

           RootPosts.PostTitle,

           1 as Level, 0 as ReplyTo

     from dbo.ForumPosts RootPosts

     where $node_id not in (select $from_id from dbo.reply_to)

  union all

     select $node_id,ReplyPost.PostId, ReplyPost.PostTitle,

            Level+1 as [Level], root.PostId as ReplyTo

     from dbo.ForumPosts ReplyPost, reply_to, root

     where ReplyPost.$node_id=reply_to.$from_id

           and root.node_id=reply_to.$to_id

  )

  select PostId,PostTitle, Level, ReplyTo

  from root

其一查询是有趣的:‘Likes’边是成员以及发帖表的涉嫌。每一个涉及还是唯一的,并无给外关联影响。代码如下:

上述两种植语句被绝无仅有的差就是显示结果的集。

 

以结果受到上加‘Level’字段

 

  1. 每当论及项目查询的附和语句:

    SELECT RepliedPost.PostId,RepliedPost.PostTitle,

         RepliedMember.MemberName, ReplyPost.PostId as ReplyId,
    
      ReplyPost.PostTitle as ReplyTitle, ReplyMember.MemberName
    

    FROM Forum.ForumPosts ReplyPost, Forum.ForumPosts RepliedPost,

       Forum.ForumMembers RepliedMember, Forum.ForumMembers ReplyMember
    

    WHERE ReplyPost.PostId=RepliedPost.ReplyTo

        and RepliedPost.OwnerId=RepliedMember.MemberId
    
        and ReplyPost.OwnerId=ReplyMember.MemberId
    
  1. 咱们添加写这回复贴人的讳。需要在FROM子句被上加‘ForumMembers’节点和‘Written_By’其一界限。语句如下:

    FROM dbo.ForumPosts ReplyPost, dbo.Reply_to, dbo.ForumPosts RepliedPost, dbo.ForumMembers RepliedMember, Written_By RepliedWritten_By

 

用户点赞并且恢复帖子